递归:

递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。

在计算机领域中,递归作为一种算法策略常用于解决某类特定问题。哪一类问题适合用递归算法来解决呢?

适合使用递归方法的来解决的问题,具备以下两个特点:

该问题可以分解成规模更小但形式相同的子问题来解决

该问题分解到最后,可以得到基准情况,该情况下无需递归就能解决问题

在计算机领域,解决递归问题,是通过递归函数实现的。递归函数是一种调用自身的函数,一个递归函数通常具备以下形态:

递归函数(输入)

{

if (是基准情况)

return 基准情况下问题的解

输入 = 规模更小的但形式相同的问题

return 递归函数(输入)

}

这个项目通过3个C语言编程实例,让你在利用递归解决实际问题的过程中学习递归并掌握其核心思想。举一反三,懂得如何使用递归解决其他实际问题。

哪三个C语言编程实例呢?

上面说通过3个C语言编程实例来学会使用递归,这3个实例如下:

使用递归解决数学问题——斐波那契数列(递归的经典例子);

使用C程序来解决一个益智游戏--汉诺塔;

更加高效解决斐波那契数列;

我们一个一个来看:

1、使用递归解决数学问题——斐波那契数列

在数学上,斐波那契数列,是递归的经典例子。 观察以下数列:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ……

数列的第0项和第1项的值分别为:0和1。后续第N项的值的为第N-1项的值与第N-2的值之和。这就是一个斐波那契数列。 数学上对于斐波那契数列的定义,采用的就是递归的定义方式:

此处输入图片的描述

根据上述的对于斐波那契数列的数学定义,我们可以轻易实现一个递归函数来求斐波那契数列上第N

项的值。

/*

* file name: fabonacciv1.c

*/

#include

#include

// 直接根据数学公式的定义,实现递归函数

long long fabonacci(int n)

{

if (n == 0) return 0; // 基准情况 0

else if (n == 1) return 1;// 基准情况 1

else return fabonacci(n-1) + fabonacci(n-2); // 分解成小问题递归求解

}

int main(int argc, char *argv[])

{

if (argc != 2) {

fprintf(stderr, "Usage: %s N.\n", argv[0]);

return 0;

}

int n = atoi(argv[1]);

fprintf(stdout, "The %dth item in the Fibonacci sequence is %lld.\n",n,fabonacci(n));

return 0;

}

编译命令:

$ gcc -o fibonacciv1 fibonacciv1.c

结果演示:

此处输入图片的描述

在上述的演示中,我们发现当输入为50时,程序迟迟不能给出结果,貌似程序的实现出问题了。

上述实例或许会打击掉我们继续学习递归的兴趣,虽然用递归可以求解问题,但当值稍微大一些就慢到我们无法忍受。效率如此低下,看来递归也没什么用嘛。 这个问题还真不能怪罪到递归头上的,这个问题其实是我们没有以合适的方式使用递归导致的。读者朋友可以先考虑一下,怎么解决这个问题,我们后续给出解决方案。

2、使用C程序来解决一个益智游戏--汉诺塔

3、更加高效解决斐波那契数列

关于后面2个实例,由于篇幅有限,就不一一将代码和步骤写出来了,想看的,可以点击【3个C语言实例带你掌握递归方法论】进行学习,有具体的实现步骤以及代码详解~

c语言递归调用程序,3个C语言实例带你掌握递归方法论相关推荐

  1. 二级计算机c语言模拟考试程序,计算机二级c语言模拟考试题

    在计算机二级考试中,我们会遇到什么样的考试内容呢?下面是学习啦小编给大家整理的计算机二级c语言模拟考试题,供大家参阅! 计算机二级c语言模拟考试题一级答案 1). 执行以下程序段后的输出结果是( ). ...

  2. PIC16F C语言测频率程序,PIC单片机C语言程序—实例5

    PIC单片机C语言程序-实例5 来源:华强电子网 作者:华仔 浏览:3630 时间:2016-08-10 14:18 标签: 摘要: 前面已介绍了学习pic单片机c语言程序的一些最基本内容,并以具有一 ...

  3. c语言开发窗口程序,怎么用c语言做一个界面?

    https://m.zjurl.cn/answer/6697137038547747083/?app=news_article&app_id=26&share_ansid=669713 ...

  4. c语言第一次作业程序题pta,c语言第一次作业程序题pta

    c语言第一次作业程序题pta 5-1 统计学生平均成绩与及格人数 (15 分)本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于 60 分)的人数.题目保证输入与输出均在整型范围内.输入格 ...

  5. c语言画曲线程序,单片机 LCD C语言画弧线的程序,哪位高手会

    当前位置:我的异常网» 单片机 » 单片机 LCD C语言画弧线的程序,哪位高手会 单片机 LCD C语言画弧线的程序,哪位高手会 www.myexceptions.net  网友分享于:2013-0 ...

  6. C语言递归调用return语句,理解C语言递归函数的逐级返回(return)

    递归函数,也即调用自身的函数. C Primer Plus中有个例子很棒: /*理解C语言递归函数*/ #include void up_and_down(int); int  main(void) ...

  7. c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc

    <c语言程序设计报告-学生信息管理系统> 中南大学 ? ? C语言程序设计实践报告 ? ? ? ? ? 题 目 学生信息管理系统 学生姓名 张眼 指导教师 刘伟荣 学 院 信息科学与工程学 ...

  8. 易语言如何调用c dll文件,易语言调用C++写的DLL

    直接调用会弹出堆栈错误的信息,原因是VS默认是__cdcel方式,而易语言是__stdcall,所以调用约定不一致导致堆栈错误. 解决方案很简单,易语言声明DLL函数时"在库中对应命令名&q ...

  9. c语言内存驻留程序,关于用C语言检查内存驻留问题的研究

    编制某些实用程序时,有时会遇到检查某一内存驻留程序是否驻留的问题,为了实现这一特殊功能,往往要书写很长的代码,有时还很难达到目的.事实上,语言系统已经提供了特定的程序来解决刚才提到的问题,因此有必要对 ...

  10. c语言地铁收费程序,地铁管理系统C语言源程序

    地铁管理系统C语言源程序,程序比较详细,可以下载看看 #include #include #include #include "api.h" #include "Subw ...

最新文章

  1. postgres中文文档
  2. Input中实现对身份证的验证
  3. Part 2 – Deep analysis using Androguard tools
  4. html 图片展示 3d,CSS3 3D图像显示
  5. 你们这些程序员,真得每天都在读代码吗?
  6. 大访问量网站缓存的一点思考,个人看法,勿拍砖
  7. 公交一卡通交通卡iphone“钱包”已有此卡无法添加的解决办法
  8. windows7系统,ping本机ip地址请求超时的解决方案
  9. Spring in Action 3 -The four kinds of autowiring
  10. MFC实现基本图形绘制、变换、自由曲线绘制、图形裁剪和填充
  11. MyBatis(九):MyBatis类型处理器(TypeHandler)详解
  12. 华为服务器怎么进入系统,服务器怎么进入系统
  13. 【Docker】docker安装elasticsearch集群,Kibana安装以及开启认证
  14. 艾伟也谈项目管理,关于项目管理的一点体会
  15. Google Benchmark Google Test
  16. dolphinschedluer配置进阶
  17. 2.电影搜索之整体结构
  18. 挂载为什么这么写mount /dev/cdrom /mnt/qwer/
  19. 电脑网线直连复制文件win11,win7
  20. 在服务器网站上做跳转页面跳转页面,服务器怎么设置跳转页面跳转页面

热门文章

  1. 园区网解决方案有哪些 园区网解决方案案例
  2. java从入门到精通 答案_JAVA从入门到精通习题
  3. 层次分析法在高校教学评价体系中的应用(原理+实例+工具)
  4. vue3.0架手架搭建以及注意事项
  5. 小米菲的Tableau学习日记01:Tableau学习资料、安装及学生版申请
  6. 无刷直流电机反电动势过零检测_TI电机库源码
  7. MCT工具的使用说明
  8. 《UNIX环境高级编程》随书代码的打开方式
  9. 通过UltraISO,写入ISO镜像,制作U盘启动盘
  10. VC2005编译安装QT