鱼C论坛

 找回密码
 立即注册
查看: 2876|回复: 12

关于一个递归

[复制链接]
发表于 2014-2-4 16:34:53 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 Road_7 于 2014-2-4 16:37 编辑


                               
登录/注册后可看大图
这个递归是网上发现的,然后就是不明白为什么最后returnx 得到的结果不是128,哪里有错。




哦,对了,这个我自己改了一下,原来是 x*=2,再fun(x)的,但这个也错了


QQ图片20140204162036.jpg

最佳答案

查看完整内容

目测下 最后一次也就是最外层的递归函数 x是1 没变过所以最后一次是return 1; 我现在没有编译器没测试过 我目测输出的应该是1 不知道对不对 不对别见怪 我觉你把那个if 改成 while应该就OK了是128
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-4 16:34:54 | 显示全部楼层
目测下 最后一次也就是最外层的递归函数 x是1 没变过所以最后一次是return 1;
我现在没有编译器没测试过 我目测输出的应该是1 不知道对不对 不对别见怪
我觉你把那个if 改成 while应该就OK了是128
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-4 18:00:48 | 显示全部楼层
把fun()函数中的if改为while试试{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-4 18:32:15 | 显示全部楼层
64894068@qq.com 发表于 2014-2-4 18:00
把fun()函数中的if改为while试试

这个是可以的,我只是想不明白if 为什么不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-4 18:50:44 | 显示全部楼层
对于fun(1)而言,初始x=1,而且x的值并没有改变,最后return x,函数返回当然是1撒。如果是先x *= 2,然后fun(x),值就是2了。
注意到这个x是局部变量的话,就很清楚这个函数完全没有达到递归的作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-4 19:30:08 | 显示全部楼层
Road_7 发表于 2014-2-4 18:32
这个是可以的,我只是想不明白if 为什么不行

if语句内的x并没有改变。或者你把第14行改为:x = fun( x*2 );
原来语句中的x*=2就是为了每执行一次fun()函数来改变x的值。你改了以后每次执行的x都没有变化的。
这个应该是看下变量的作用域。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-4 22:11:24 | 显示全部楼层
64894068@qq.com 发表于 2014-2-4 19:30
if语句内的x并没有改变。或者你把第14行改为:x = fun( x*2 );
原来语句中的x*=2就是为了每执行一次fun( ...

那接下来的fun(2)执行了吗?还有就是为什么x是没变化的。。。。可能作用域要去重新看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-4 22:28:31 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-2-4 19:21
目测下 最后一次也就是最外层的递归函数 x是1 没变过所以最后一次是return 1;
我现在没有编译器没测试过 我 ...

不明白为什么x 会没变,明明是调用了自己,fun(2)fun(4)。。。。fun(128)if 不执行,然后return了x
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-4 22:36:25 | 显示全部楼层
Road_7 发表于 2014-2-4 22:28
不明白为什么x 会没变,明明是调用了自己,fun(2)fun(4)。。。。fun(128)if 不执行,然后return了x

那是个局部变量啊 fun(x)里面的fun(x)里的x和最外面的x没半毛钱关系的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-4 22:45:06 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-2-4 22:36
那是个局部变量啊 fun(x)里面的fun(x)里的x和最外面的x没半毛钱关系的

en ,刚才又测试了一下,fun里面的fun还是执行的,但最后return 的x 确实没变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-2-4 23:04:04 | 显示全部楼层

                               
登录/注册后可看大图
貌似懂了局部变量了,感觉是被里面的if语句迷惑了,总之谢谢各位:lol:
QQ图片20140204225740.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-5 22:09:51 | 显示全部楼层
Road_7 发表于 2014-2-4 23:04
貌似懂了局部变量了,感觉是被里面的if语句迷惑了,总之谢谢各位

既然懂了是不是可以给我最佳答案呢??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-6 14:31:32 | 显示全部楼层
看看           
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 02:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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