一尘不染

了解Python中的递归

algorithm

我真的是想让我的脑袋围绕递归的工作原理和理解递归算法。例如,当我输入5时,下面的代码返回120,请原谅我的无知,而我只是不明白为什么?

def fact(n):
    if n == 0:
        return 1
    else:
        return n * fact(n-1)

answer = int (raw_input('Enter some number: '))

print fact(answer)

阅读 220

收藏
2020-07-28

共1个答案

一尘不染

让我们逐步执行。

fact(5):
   5 is not 0, so fact(5) = 5 * fact(4)
   what is fact(4)?
fact(4):
   4 is not 0, so fact(4) = 4 * fact(3)
   what is fact(3)?
fact(3):
   3 is not 0, so fact(3) = 3 * fact(2)
   what is fact(2)?
fact(2):
   2 is not 0, so fact(2) = 2 * fact(1)
   what is fact(1)?
fact(1):
   1 is not 0, so fact(1) = 1 * fact(0)
   what is fact(0)?
fact(0):
   0 IS 0, so fact(0) is 1

现在让我们收集结果。

fact(5) = 5* fact(4)

用我们的结果代替事实(4)

fact(5) = 5 * 4 * fact(3)

用我们的结果代替事实(3)

fact(5) = 5 * 4 * 3 * fact(2)

用我们的结果代替事实(2)

fact(5) = 5 * 4 * 3 * 2 * fact(1)

用我们的结果代替事实(1)

fact(5) = 5 * 4 * 3 * 2 * 1 * fact(0)

用我们的结果代替事实(0)

fact(5) = 5 * 4 * 3 * 2 * 1 * 1 = 120

那里有。递归是通过将大问题视为成功的小问题来分解大问题的过程,直到遇到琐碎(或“基本”)的情况。

2020-07-28