无法理解递归函数python

问题描述

我确信这个问题在过去曾被问过很多,但是我一生都无法理解此功能的发生情况:

def myfactorial(n):
    if n == 1: 
        return [1]
    else: 
        return myfactorial(n-1) + [n * myfactorial(n-1)[n-2]]

如果您能帮助我理解这一点,我将非常感激;我通常会理解其他递归函数,但这让我陷入了困境。谢谢您的帮助。

解决方法

def myfactorial(n):
    if n == 1: 
        return [1]
    else: 
        return myfactorial(n-1) + [n * myfactorial(n-1)[n-2]]

这可能最容易以n值可视化

当n = 2时,我们跳过if并转到else循环

return myfactorial(1) + [2 * myfactorial(1)[0]] 
# Then,since if n == 1 we return [1] from myfactorial()
return [1] + [2 * [1][0]]
return [1] + [2]
return [1,2]

类似地,我们可以对n = 3做类似的事情

return myfactorial(2) + [3 * myfactorial(2)[1]]
# Since we know from the above that myfactorial(2) = [1,2]
return [1,2] + [3 * [1,2][1]]
return [1,2] + [3 * 2]
return [1,2,6]

而且,为了利益,n = 4

return myfactorial(3) + [4 * myfactorial(3)[2]]
return [1,6] + [4 * [1,6][2]]
return [1,6,24]