c语言递归的实验过程,C语言递归复习过程.docx

精品文档

精品文档

精品文档

C 语言递归

简介

递归,作为 C 语言最经典的算法之一,是一种非常有用的程序设计方法。 虽然用递归算法编写的程序结构清晰, 具有很好的可读性, 还往往使某些看起来 不易解决的问题变得容易解决。但在递归函数中,由于存在着自调用过程, 程序 控制反复进入其自身, 使程序的分析设计有一定困难, 致使很多初学者往往对递 归迷惑不解, 也在这上面花了不少的时间, 却收效甚微。 那么,究竟什么是递归 ? 怎么实现递归呢 ?

所谓递归 ,简而言之就是 在调用一个函数的过程中又直接或间接地调用该函 数本身,以实现层次数据结构的查询和访问 。

在函数中直接调用函数本身,称为 直接递归调用 。在函数中调用其它函数, 其它函数又调用原函数,这就构成了函数自身的间接调用,称为 间接递归调用 。

条件

而采用递归方法来解决问题,必须符合以下三个条件:

、 可以把要解决的问题转化为一个新问题, 而这个新的问题的解决方法 仍与原来的解决方法相同 ,只是所处理的对象有规律地递增或递减。 说明 :解决问题的方法相同,调用函数的参数每次不同(有规律的递 增或递减),如果没有规律也就不能适用递归调用。

、 可以应用这个转化过程使问题得到解决。 说明 :使用其他的办法比较 麻烦或很难解决,而使用递归的方法可以很好地解决问题

、 必定要有一个 明确的结束递归的条件 。说明:一定要能够在适当的地 方结束递归调用。不然可能导致系统崩溃。

求 n !问题

好知道是这样以后 ;我们来写一个众多教材上的程序: 使用递归的方法求 n! 当 n>1 时,求 n!的问题可以转化为 n*(n-1)! 的新问题 。比如 n=4 : 第一部分: 4*3*2*1 n*(n-1)!

第二部分: 3*2*1 (n-1)(n-2)!

第三部分: 2*1 (n-2)(n-3)!

第四部分: 1 (n-4)! 4-4=0,得到值 1,结束递归。

源程序如下:

#include

精品文档

int fac( int n)

int c;

printf( "now the number is %d " , n);

getchar();

printf( "now the number is %d and the %d! is %d" ,n, n,c);

getchar();

return c;

void main()

int n=4;

printf( "result is %d.\n" ,fac(n));

可以看到, 加上两条 printf() 和 getchar()语句后,可以察看各级调用及其中间 答案,很清楚的看到程序的执行过程。

运行结果如图 1 所示,当主函数第一次调用 fac()函数的时候,由于 n=4 不 等于 0 和 1,并不立即返回结果 1,而是执行 c=n*fac(n-1) ,用实参 n-1(值为 3) 调用 fac()函数自己,即递归调用 fac(3)。于是进入第二层调用 fac() ,这时也没有 得出结果,继续用实参 n-1(值为 2)调用 fac()函数自己。同样经过第三层调用

精品文档 后进入第四层调用, 这时候 n=1,算出 1!=1,满足结束递归的条件,然后把得出 的结果 1返回给第三次调用的 fac函数,得出 2*1!=2 ,然后把结果 2 返回给第二 次调用的 fac函数,得出 3*2!=6,最后第一次调用的 fac 函数根据第二次调用的 返回值算出 4!=4*3!=4*6=24 ,结束整个递归调用,得出最终结果并输出。

我们做事情, 一般都是从头开始的,而递归却是从末尾开始的。 比如上面的 函数,当 n>1的时候,就只能求助于 n-1,而(n-1)>1 时,就求助于 n-2,然后?? 直到(n-k)=1 时,函数 fac 终于有了返回值 1 了,它再从头开始计算, 然后一直算 到 n 为止。 所以说,递归简直就是一个数学模型, 它的工作过程就是自己调用自 己。

说明

以下是几点对递归的说明:

.当函数自己调用自己时,系统将自动把函数中当前的变量和形参暂时保 留起来,在新一轮的调用过程中,系统为新调用的函数所用到的变量和 形参开辟另外的存储单元(内存空间) 。每次调用函数所使用的变量在 不同的内存空间。

.递归调用的层次越多,同名变量的占用的存储单元也就越多。一定要记 住,每次函数的调用,系统都会为该函数的变量开辟新的内存空间。

.当本次调用的函数运行结束时,系统将释放本次调用时所占用的内存空 间。程序的流程返回到上一层的调用点,同时取得当初进入该层时,函 数中的变量和形参所占用的内存空间的数据。

.在开发过程中使用 printf() 和 getchar()可以看到执行过程,并且可以在发 现错误后停止运行。

很多人说所有递归问

1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行;、 2项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值