def fact(n):
if n == 0:
return 2
return n*fact(n-1)
print(fact(5))
我有这个Python函数代码,它找到给定数字“n”的阶乘,但我很好奇函数fact()中返回的行为,因为当我在if语句中返回2时,答案是双倍的阶乘,当我加 3 时,它会变成三倍。
为什么if条件的返回值要与main函数的返回值相乘?
我的目标是了解Python函数中更多一个返回语句的行为
让我们看一下您的代码。使用箭头显示函数及其值的递归调用:
函数调用: 事实(5) -> 5*事实(4) -> 4*事实(3) -> 3*事实(2)->2*事实(1)->1*事实(0) 在fact(0) 处,没有进一步调用函数,因为if 语句使其从if 语句返回值返回值2。所以fact(0)=2(这是不正确的,应该是1?)
然后,传递值(从右向左读取并与上面的函数调用进行比较): 事实(5) = 5*4*3*2*1*2 <- 4*3*2*1*2 <- 3*2*1*2<- 2*1*2 <- 1*2 so fact(5) returns 120*2=240.
如果你确实想让这个做正确的数学阶乘函数,fact(0)=1,即让if语句返回1。那么fact(5)将返回120=5!
当函数调用自身时,称为递归。这就是您在这里看到的。
在此代码中,函数
fact
使用参数 (n-1)
: 调用自身
def fact(n):
if n == 0:
return 2
return n*fact(n-1)
print(fact(5))
维基百科将递归定义为:
在计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一问题的较小实例的解决方案。递归通过使用从自己的代码中调用自身的函数来解决此类递归问题。该方法可以应用于多种类型的问题,递归是计算机科学的中心思想之一。
引自:https://en.wikipedia.org/wiki/Recursion_(computer_science)