Road_7 发表于 2014-2-4 16:34:53

关于一个递归

本帖最后由 Road_7 于 2014-2-4 16:37 编辑

http://bbs.fishc.com/forum.php?mod=image&aid=20724&size=300x300&key=b9260713a9bd4aec&nocache=yes&type=fixnone这个递归是网上发现的,然后就是不明白为什么最后returnx 得到的结果不是128,哪里有错。




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


牡丹花下死做鬼 发表于 2014-2-4 16:34:54

目测下 最后一次也就是最外层的递归函数 x是1 没变过所以最后一次是return 1;
我现在没有编译器没测试过 我目测输出的应该是1 不知道对不对 不对别见怪
我觉你把那个if 改成 while应该就OK了是128

64894068@qq.com 发表于 2014-2-4 18:00:48

把fun()函数中的if改为while试试{:1_1:}

Road_7 发表于 2014-2-4 18:32:15

64894068@qq.com 发表于 2014-2-4 18:00 static/image/common/back.gif
把fun()函数中的if改为while试试

这个是可以的,我只是想不明白if 为什么不行

故乡的风 发表于 2014-2-4 18:50:44

对于fun(1)而言,初始x=1,而且x的值并没有改变,最后return x,函数返回当然是1撒。如果是先x *= 2,然后fun(x),值就是2了。
注意到这个x是局部变量的话,就很清楚这个函数完全没有达到递归的作用。

64894068@qq.com 发表于 2014-2-4 19:30:08

Road_7 发表于 2014-2-4 18:32 static/image/common/back.gif
这个是可以的,我只是想不明白if 为什么不行

if语句内的x并没有改变。或者你把第14行改为:x = fun( x*2 );
原来语句中的x*=2就是为了每执行一次fun()函数来改变x的值。你改了以后每次执行的x都没有变化的。
这个应该是看下变量的作用域。

Road_7 发表于 2014-2-4 22:11:24

64894068@qq.com 发表于 2014-2-4 19:30 static/image/common/back.gif
if语句内的x并没有改变。或者你把第14行改为:x = fun( x*2 );
原来语句中的x*=2就是为了每执行一次fun( ...

那接下来的fun(2)执行了吗?还有就是为什么x是没变化的。。。。可能作用域要去重新看看

Road_7 发表于 2014-2-4 22:28:31

牡丹花下死做鬼 发表于 2014-2-4 19:21 static/image/common/back.gif
目测下 最后一次也就是最外层的递归函数 x是1 没变过所以最后一次是return 1;
我现在没有编译器没测试过 我 ...

不明白为什么x 会没变,明明是调用了自己,fun(2)fun(4)。。。。fun(128)if 不执行,然后return了x

牡丹花下死做鬼 发表于 2014-2-4 22:36:25

Road_7 发表于 2014-2-4 22:28 static/image/common/back.gif
不明白为什么x 会没变,明明是调用了自己,fun(2)fun(4)。。。。fun(128)if 不执行,然后return了x

那是个局部变量啊 fun(x)里面的fun(x)里的x和最外面的x没半毛钱关系的

Road_7 发表于 2014-2-4 22:45:06

牡丹花下死做鬼 发表于 2014-2-4 22:36 static/image/common/back.gif
那是个局部变量啊 fun(x)里面的fun(x)里的x和最外面的x没半毛钱关系的

en ,刚才又测试了一下,fun里面的fun还是执行的,但最后return 的x 确实没变

Road_7 发表于 2014-2-4 23:04:04

http://bbs.fishc.com/forum.php?mod=image&aid=20744&size=300x300&key=5bab82e7e13aaede&nocache=yes&type=fixnone貌似懂了局部变量了,感觉是被里面的if语句迷惑了,总之谢谢各位:lol:

牡丹花下死做鬼 发表于 2014-2-5 22:09:51

Road_7 发表于 2014-2-4 23:04 static/image/common/back.gif
貌似懂了局部变量了,感觉是被里面的if语句迷惑了,总之谢谢各位

既然懂了是不是可以给我最佳答案呢??

飞蛤 发表于 2014-2-6 14:31:32

看看         
页: [1]
查看完整版本: 关于一个递归