gpt4 book ai didi

python - 递归:看起来像相同的函数,但打印出不同的执行流程

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:44 24 4
gpt4 key购买 nike

我尝试打印阶乘递归函数的执行流程。

def factorial(n):
space=' '*(4*n)
print(space,'factorial ',n)
if n==0:
print(space,'returning 1')
return 1
else:
recurse=factorial(n-1)
result=n*recurse
print(space,'returning ', result)
return n*recurse

使用阶乘(2) 结果将是正确的:

        factorial 2
factorial 1
factorial 0
returning 1
returning 1
returning 2
2

但是当我不使用变量 recurse=factorial(n-1) 时:

def factorial(n):
space=' '*(4*n)
print(space,'factorial ',n)
if n==0:
print(space,'returning 1')
return 1
else:
result=n*factorial(n-1)
print(space,'returning ', result)
return n*factorial(n-1)

然后使用阶乘(2)打印出不同的流程:

             factorial  2
factorial 1
factorial 0
returning 1
returning 1
factorial 0
returning 1
returning 2
factorial 1
factorial 0
returning 1
returning 1
factorial 0
returning 1
2

我的问题是:为什么执行流程不同[有和没有变量 recurse=factorial(n-1)]?

最佳答案

这是由于代码中的以下额外函数调用所致

def factorial(n):
space=' '*(4*n)
print(space,'factorial ',n)
if n==0:
print(space,'returning 1')
return 1
else:
result=n*factorial(n-1)
print(space,'returning ', result)
return n*factorial(n-1) # factorial(n-1) is called second time so that this function is executed once again

您可以按照以下方式执行类似的操作

def factorial(n):
space=' '*(4*n)
print(space,'factorial ',n)
if n==0:
print(space,'returning 1')
return 1
else:
result=n*factorial(n-1)
print(space,'returning ', result)
return result

关于python - 递归:看起来像相同的函数,但打印出不同的执行流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54863769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com