鱼C论坛

 找回密码
 立即注册
查看: 2901|回复: 16

关于递归问题

[复制链接]
发表于 2013-12-3 08:47:48 | 显示全部楼层 |阅读模式
30鱼币
递归到底是怎么样实现的???很苦恼。。。求解。。。。。。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 11:07:09 | 显示全部楼层
就是自己调用自己,中学数学也讲过啊。f(x)=f(x)+1.上一次的结果累积到新的一次。你这样想,别把F(X)想成函数,就想成一个数字,然后你先推,最后在转换成函数。应该就好理解了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 13:56:08 | 显示全部楼层
说白了就是调用函数,只不过这函数是自己而言。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-3 16:44:54 | 显示全部楼层

那个汉诺塔一直不理解,也知道它是自己调用自己
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-12-3 16:45:32 | 显示全部楼层
小亮1201 发表于 2013-12-3 13:56
说白了就是调用函数,只不过这函数是自己而言。

那个汉诺塔一直不理解,也知道它是自己调用自己
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 17:42:31 | 显示全部楼层
这对于学汇编的童鞋来说,压根不是事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 19:34:41 | 显示全部楼层
18326638710 发表于 2013-12-3 16:44
那个汉诺塔一直不理解,也知道它是自己调用自己

慢慢就理解了,你现在只是知道自己调用自己 但是不理解自己调用自己
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 19:48:23 | 显示全部楼层
其实和循环有点类似。循环是不断调用一段代码。递归是把这段代码写到一个函数里去,然后函数自己调用自己(也是不断调用函数体内的这段代码,当然返回值的处理有点不一样,如果学过数据结构的堆栈就能理解了)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-3 19:50:13 | 显示全部楼层
说实话,我也不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-4 00:11:41 | 显示全部楼层
表示我也不理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-12-4 21:28:04 | 显示全部楼层
通用公式,       就是递归。通过反复调用同样的函数,来实现。 递归函数是最后一行的情况称为伪递归。这东西有点只能意会不能言传的感觉!我递归也不是很熟练!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-20 18:25:55 | 显示全部楼层
给我汉娜塔源程序 我帮你分析一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-9 10:38:38 From FishC Mobile | 显示全部楼层
递归就是函数自己调用自己   你可以把每次调用当做一个函数在调用另一个函数来理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-9 17:29:23 | 显示全部楼层
本帖最后由 紫月冰蓝 于 2014-4-9 17:33 编辑

假设求n!:
假设n=4
fac(int n)
{
int t;
if(n==1||n==0) return 1;   // 这里是1号
else
   {
      t=n*fac(n-1); //这里是2号
      return t;  //这里是3号
    }
}
这里当主函数第一次调用fac时,系统为形参n开辟了存储单元, 为了区分,这个单元假设叫n1,把4的值传给n1,
同时系统为变量t开辟单元,假设叫t1;因为n1的值大于1,程序执行第2号语句中的赋值语句,按运算规律,应该先求等号右边的表达式的值;在此表达式中用实参n-1(值为3)又一次调用了fac函数自己,
进入第二次调用fac,系统为形参n开辟了一个新的单元n2,把3的值传给n2,同时系统为变量t开辟了新的单元t2,程序再次执行第2号语句,又一次调用了fac函数自己,这时实参n-1值为2.
进行第三次调用fac,与第二次相同,只是形参n3的值为2,程序再次执行第2号语句,又一次调用自己,实参n-1的值为1
进行第四次调用fac,与第二次机同,只是形参n4的值为1,这时执行第1号语句中if语句后面的return,递归调用结束,同时结束本次调用,返回函数值1,本次调用中形参n4与变量t4所占的单元被释放,
程序返回到第三次调用中第2号语句的调用点,表达式n*fac(n-1)中,fac函数的返回值是1,n3中的值是2,因此表达式的值为2,赋给t3;接着执行第3号语句中的return语句,本次调用结束,返回函数值2,同时n3和t3所占单元被释放.
程序返回到第二次调用中第2号语句的调用点,表达式n*fac(n-1)中,fac函数的返回值是2,n2中的值是3,因此表达式的值为6,赋给t2;接着执行第3号语句中的return语句,本次调用结束,返回函数值6,同时n2和t2所占单元被释放.
程序返回到第一次调用中第2号语句的调用点,表达式n*fac(n-1)中,fac函数的返回值是6,n1中的值是4,因此表达式的值为24,赋给t1;接着执行第3号语句中的return语句,本次调用结束,返回函数值24,同时n1和t1所占单元被释放.
程序返回到main主函数中的调用点,函数值为24 ,函数调用到此结束,继续执行其它语句.
个人感觉递归调用就是不断的在调用函数的时候开避新的变量,,把形参中的值赋值给新的变量,用新的变量当函数的新值再去调用函数本身,直到条件成立依次层层退出函数  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-10 18:45:05 | 显示全部楼层
弟归不难理解啊,说白就是调用函数,只不过是调用它本身,要设置好返回的条件就行了,不然会死循环:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-11 03:28:09 | 显示全部楼层
递归其实不难 就是自己调用自己而已 只是要避免死循环无限递归
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-11 04:47:32 | 显示全部楼层
就像一个数列的那种……第n个数和第n-1个数存在某种关系……汉诺塔……其实我也不太明白……
不过程序我倒是敲过一次了……
http://bbs.fishc.com/thread-45283-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 00:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表