caeser 发表于 2023-3-1 17:13:44

递归的问题!

各位老师,求助第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呢?

chinajz 发表于 2023-3-1 17:25:41

本帖最后由 chinajz 于 2023-3-1 21:16 编辑

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

onelike 发表于 2023-3-1 17:35:28

n*factRecur(n-1)= n乘以factRecur(n-1)的返回值,也就是再调用了一次factRecur()函数,到n=1时factRecur(1)返回1,返回的1归还前面的2*factRecur(1),再逐层归还

wanglyndon 发表于 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

chinajz 发表于 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)
页: [1]
查看完整版本: 递归的问题!