Python 函数中 return 的本质是什么[重复]

问题描述 投票:0回答:2
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函数中更多一个返回语句的行为

python function recursion return
2个回答
0
投票

让我们看一下您的代码。使用箭头显示函数及其值的递归调用:

函数调用: 事实(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!


0
投票

当函数调用自身时,称为递归。这就是您在这里看到的。

在此代码中,函数

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)

© www.soinside.com 2019 - 2024. All rights reserved.