python中递归的问题
答案:3 悬赏:80
解决时间 2021-03-12 20:13
- 提问者网友:空白
- 2021-03-12 07:49
我就是转不过弯来了,函数调用自身那块,思来想去就是别扭,云里旦缉测垦爻旧诧驯超沫雾里的。
就是那个最简单的阶乘问题。谁能帮我把代码拆开好好讲讲?
问题补充:一楼,其实我不明白的就是这句 return n*f(n-1) 假如这里的N=6的话旦缉测垦爻旧诧驯超沫是不是就变成了这样 return 6*(6-1)*(6-1-1)*(6-1-1-1)*(6-1-1-1-1)·····这样的话当N到了0的时候不是在第一个IF那里就卡住了吗(直接返回1了。)上面的return 6*(6-1)*(6-1-1)*(6-1-1-1)*(6-1-1-1-1)·····不就都废了~
最佳答案
- 二级知识专家网友:請叫我丶偏執狂
- 2021-03-12 08:14
展开的过程是这样的
return n*f(n-1)
因为f(n-1)return的是(n-1)f(n-2)所以你才能用(n-1)f(n-2)替换f(n-1)展开成
retrun n*(n-1)f(n-2)
依次类推
...
return n*...*2*f(1)
return n*...*2*1*f(0)
return n*...*2*1*1
所以里面的return在你展开的过程中就已经执行过了
return n*f(n-1)
因为f(n-1)return的是(n-1)f(n-2)所以你才能用(n-1)f(n-2)替换f(n-1)展开成
retrun n*(n-1)f(n-2)
依次类推
...
return n*...*2*f(1)
return n*...*2*1*f(0)
return n*...*2*1*1
所以里面的return在你展开的过程中就已经执行过了
全部回答
- 1楼网友:承载所有颓废
- 2021-03-12 08:52
递归方法有些时候是不太好理解,不过递归的意义就是把解决问题n变成解决n-1的问题,最终变成解决1个问题。
假设有n个盘子,从上到下依次编号,最下面的盘子编号是大写的n。托盘分别是x,y,z。要把所有盘子从x移动到z。
前面几行代码就不解释了,很容易理解。
第五行,如果只有一个盘子,就直接从x移动到z。
第七行,如果不只一个盘子,先把上面n-1个盘子从x移动到y。
第八行,再把n号盘子从x移动到z。
第九行,再把刚才那n-1个盘子从y移动到z。
至于那n-1个盘子是怎么移动的,再次调用这个函数,把问题变成n-2个盘子加1个盘子的问题。
- 2楼网友:错过的是遗憾
- 2021-03-12 08:19
他的函数里面不是有个if条件判断的么,当n=0的时候就会返回1,而不是继续调用了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯