提问人:Abdul Basit 提问时间:9/7/2023 最后编辑:Abdul Basit 更新时间:9/15/2023 访问量:46
python 函数中返回的本质是什么 [duplicate]
what is the nature of return in python functions [duplicate]
问:
def fact(n):
if n == 0:
return 2
return n*fact(n-1)
print(fact(5))
我有这个 python 函数代码,它可以找到给定数字“n”的阶乘,但我对函数 fact() 中返回的行为感到好奇,因为当我(返回 2)在 if 语句中时,答案是阶乘的两倍,当我添加 3 时,它是三倍。
为什么 if 条件的返回值乘以 main 函数的返回值?
我的目标是了解 python 函数中更多 one return 语句的行为
答:
让我们看一下你的代码。使用箭头显示函数及其值的递归调用:
函数调用: 事实(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 所以 fact(5) 返回 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)
评论
n == 0
n == 1
return
return
None