我真的是想让我的脑袋围绕递归的工作原理和理解递归算法。例如,当我输入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)
让我们逐步执行。
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
那里有。递归是通过将大问题视为成功的小问题来分解大问题的过程,直到遇到琐碎(或“基本”)的情况。