鱼C论坛

 找回密码
 立即注册
查看: 2680|回复: 10

递归有些位置看有疑问 请教下各位

[复制链接]
发表于 2012-5-29 22:59:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 素还真 于 2012-5-30 14:31 编辑

1.png 图中红色箭头那里 如果n=5

那么他在 5 - 1之后得出4乘以5之后 结果给予temp_result; 他应该 直接跳转到 return temp_result; 这里来呢 为什么直接跳转到 i f这里来了 这里我实在纳闷

还有就是   temp_result = recursion(n-1) * n;  里面的N   N是变量 变量 不是 除非赋值 或者N++ N-- N的值才会变动吗 怎么在
N减1 temp_result = recursion(n-1) * n;这调代码运算完之后 跳转回去N就怎么变成4了呢 这里也不懂 求教育


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-29 23:08:47 | 显示全部楼层
重新看了一遍 算是懂了 调用函数的时候 他会跑到定义那个函数的头部   但是 temp_result = recursion(n-1) * n;  这里N不是应该  N---  或者 n=n-1  这样 跳转到函数头部的时候N才变动吗:Q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-29 23:21:22 | 显示全部楼层

我列一下,你看看能不能明白
recursion (5) = recursion(4) * 5;
recursion(4) = recursion(3)*4;
recursion(3)=recursion(2)*3:
recursion(2)=recursion(1)*2
recursion(1)=>temp_result = 1;
所以temp_result最终等于120*recrusion(1),等于120.
这是自我调用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-29 23:42:59 | 显示全部楼层
玩酷子弟lv 发表于 2012-5-29 23:21
我列一下,你看看能不能明白
recursion (5) = recursion(4) * 5;
recursion(4) = recursion(3)*4;


recursion (5) = recursion(4) * 5;
你看 N - 1 变成 4    ===  4 * 5
那个5是N  你看recursion(n - 1)之后 N的值不变只是 ()里的值变动了 但N没变  怎么 到第二圈的时候 N就变成4 - 1了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-29 23:52:11 | 显示全部楼层
玩酷子弟lv 发表于 2012-5-29 23:21
我列一下,你看看能不能明白
recursion (5) = recursion(4) * 5;
recursion(4) = recursion(3)*4;

怎么都想不明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-30 08:44:53 | 显示全部楼层
素还真 发表于 2012-5-29 23:08
重新看了一遍 算是懂了 调用函数的时候 他会跑到定义那个函数的头部   但是 temp_result = recursion(n-1)  ...

看的是long recursion(int n)函数中的参数n,第二圈是recursion(4)调用这个函数这时N就是4了,recursion(3)调用时n就等于3,以此类推。

评分

参与人数 1鱼币 +5 收起 理由
素还真 + 5 很不错!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-30 10:57:07 | 显示全部楼层
玩酷子弟lv 发表于 2012-5-30 08:44
看的是long recursion(int n)函数中的参数n,第二圈是recursion(4)调用这个函数这时N就是4了,recursion( ...

恩  还想请教下 用VC6++ debug的时候   当他执行到temp_result = recursion(n-1) * n;然后执行过后   他直接跳转到 i f 头   但是temp_result 的值并没有改变  是不是 在定义里面 调用函数 他只执行 recursion(n-1) 然后跳转到声明这个函数的地方
并不执行 * N 和 把值赋值给temp_result 的操作啊。

还有当 N == 1 之后  他跳转到return temp_result; 的时候 会返回到上一个调用函数的地方 那就是返回到
temp_result = recursion(n-1) * n; 这里来 但是之后的操作我确怎么也想不清楚:L  能告知一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-30 11:05:40 | 显示全部楼层
你的基础知识不够扎实   理解错了

评分

参与人数 1鱼币 +5 收起 理由
素还真 + 5 神马都是浮云

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-30 11:09:10 | 显示全部楼层
longdeqidao 发表于 2012-5-30 11:05
你的基础知识不够扎实   理解错了

能否说一下他的运行过程 或者说 我该把函数那章重新看一遍吗:L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-5-30 12:02:22 | 显示全部楼层
recursion(n-1)就已经是赋值了,把n-1赋给下一个递归式。还有就是  就我个人理解 recursion(n-1)递归到n=1的时候执行第二个if   然后再递归回来。
你是在看小甲鱼的视频吧  ,听没听到他说的一句话叫   有归必有回   归去来兮。
所以你在调试的时候   n变回4是已经递归完成了。。。我也是新手  但是我是这么理解的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-5-30 12:36:46 | 显示全部楼层
longdeqidao 发表于 2012-5-30 12:02
recursion(n-1)就已经是赋值了,把n-1赋给下一个递归式。还有就是  就我个人理解 recursion(n-1)递归到n=1 ...

恩 我在找找网上怎么说的 谢谢了 :hug:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-29 12:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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