鱼C论坛

 找回密码
 立即注册
查看: 1754|回复: 4

[已解决]递归的问题!

[复制链接]
发表于 2023-3-1 17:13:44 | 显示全部楼层 |阅读模式

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

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

x
各位老师,求助第49课递归的问题:
>>> def factRecur(n):
...     if n == 1:
...         return 1
...     else:
...         return n * factRecur(n-1)
...
>>> factRecur(5)

n * factRecur(n-1) 当 n = 5时:
是不是可以这样理解:
5 * factRecur(5-1) -- 4 * factRecur(4-1) -- 3 * factRecur(3-1) -- 2 * factRecur(2-1)  = 5*4*3*2 = 120

那为什么最后返回的不是 1 而是120呢?
最佳答案
2023-3-1 17:25:41
本帖最后由 chinajz 于 2023-3-1 21:16 编辑

工作过程:
  1. def factRecur(n):
  2.     if n == 1:
  3.         return 1
  4.     else:
  5.         print(n,end=" x ")#n值由大向小递归,直到2
  6.         return n * factRecur(n-1)
  7. print ("1 =", factRecur(5)) #把n=1时,返回值1补完整。
复制代码

运行:
  1. 5 x 4 x 3 x 2 x 1 = 120
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-1 17:25:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 chinajz 于 2023-3-1 21:16 编辑

工作过程:
  1. def factRecur(n):
  2.     if n == 1:
  3.         return 1
  4.     else:
  5.         print(n,end=" x ")#n值由大向小递归,直到2
  6.         return n * factRecur(n-1)
  7. print ("1 =", factRecur(5)) #把n=1时,返回值1补完整。
复制代码

运行:
  1. 5 x 4 x 3 x 2 x 1 = 120
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-1 17:35:28 From FishC Mobile | 显示全部楼层
n*factRecur(n-1)= n乘以factRecur(n-1)的返回值,也就是再调用了一次factRecur()函数,到n=1时factRecur(1)返回1,返回的1归还前面的2*factRecur(1),再逐层归还
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-1 21:48:54 | 显示全部楼层
运行过程:
5 * factRecur(4)
5 * 4 * factRecur(3)
5 * 4 * 3 * factRecur(2)
5 *4 * 3 * 2 * factRecur(1) 这里的factRecur(1)直接 return 1
最后整个函数返回的结果是120
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-2 05:31:20 | 显示全部楼层
wanglyndon 发表于 2023-3-1 21:48
运行过程:
5 * factRecur(4)
5 * 4 * factRecur(3)

facResur(4)=?
n*facResur(n-1)是个过程,递归时就是 n*(n-1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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