c语言递归调用程序,3个C语言实例带你掌握递归方法论
递归:
递归(英语: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语言实例带你掌握递归方法论相关推荐
- 二级计算机c语言模拟考试程序,计算机二级c语言模拟考试题
在计算机二级考试中,我们会遇到什么样的考试内容呢?下面是学习啦小编给大家整理的计算机二级c语言模拟考试题,供大家参阅! 计算机二级c语言模拟考试题一级答案 1). 执行以下程序段后的输出结果是( ). ...
- PIC16F C语言测频率程序,PIC单片机C语言程序—实例5
PIC单片机C语言程序-实例5 来源:华强电子网 作者:华仔 浏览:3630 时间:2016-08-10 14:18 标签: 摘要: 前面已介绍了学习pic单片机c语言程序的一些最基本内容,并以具有一 ...
- c语言开发窗口程序,怎么用c语言做一个界面?
https://m.zjurl.cn/answer/6697137038547747083/?app=news_article&app_id=26&share_ansid=669713 ...
- c语言第一次作业程序题pta,c语言第一次作业程序题pta
c语言第一次作业程序题pta 5-1 统计学生平均成绩与及格人数 (15 分)本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于 60 分)的人数.题目保证输入与输出均在整型范围内.输入格 ...
- c语言画曲线程序,单片机 LCD C语言画弧线的程序,哪位高手会
当前位置:我的异常网» 单片机 » 单片机 LCD C语言画弧线的程序,哪位高手会 单片机 LCD C语言画弧线的程序,哪位高手会 www.myexceptions.net 网友分享于:2013-0 ...
- C语言递归调用return语句,理解C语言递归函数的逐级返回(return)
递归函数,也即调用自身的函数. C Primer Plus中有个例子很棒: /*理解C语言递归函数*/ #include void up_and_down(int); int main(void) ...
- c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc
<c语言程序设计报告-学生信息管理系统> 中南大学 ? ? C语言程序设计实践报告 ? ? ? ? ? 题 目 学生信息管理系统 学生姓名 张眼 指导教师 刘伟荣 学 院 信息科学与工程学 ...
- 易语言如何调用c dll文件,易语言调用C++写的DLL
直接调用会弹出堆栈错误的信息,原因是VS默认是__cdcel方式,而易语言是__stdcall,所以调用约定不一致导致堆栈错误. 解决方案很简单,易语言声明DLL函数时"在库中对应命令名&q ...
- c语言内存驻留程序,关于用C语言检查内存驻留问题的研究
编制某些实用程序时,有时会遇到检查某一内存驻留程序是否驻留的问题,为了实现这一特殊功能,往往要书写很长的代码,有时还很难达到目的.事实上,语言系统已经提供了特定的程序来解决刚才提到的问题,因此有必要对 ...
- c语言地铁收费程序,地铁管理系统C语言源程序
地铁管理系统C语言源程序,程序比较详细,可以下载看看 #include #include #include #include "api.h" #include "Subw ...
最新文章
- postgres中文文档
- Input中实现对身份证的验证
- Part 2 – Deep analysis using Androguard tools
- html 图片展示 3d,CSS3 3D图像显示
- 你们这些程序员,真得每天都在读代码吗?
- 大访问量网站缓存的一点思考,个人看法,勿拍砖
- 公交一卡通交通卡iphone“钱包”已有此卡无法添加的解决办法
- windows7系统,ping本机ip地址请求超时的解决方案
- Spring in Action 3 -The four kinds of autowiring
- MFC实现基本图形绘制、变换、自由曲线绘制、图形裁剪和填充
- MyBatis(九):MyBatis类型处理器(TypeHandler)详解
- 华为服务器怎么进入系统,服务器怎么进入系统
- 【Docker】docker安装elasticsearch集群,Kibana安装以及开启认证
- 艾伟也谈项目管理,关于项目管理的一点体会
- Google Benchmark Google Test
- dolphinschedluer配置进阶
- 2.电影搜索之整体结构
- 挂载为什么这么写mount /dev/cdrom /mnt/qwer/
- 电脑网线直连复制文件win11,win7
- 在服务器网站上做跳转页面跳转页面,服务器怎么设置跳转页面跳转页面