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

问题描述 投票:1回答:1

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

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

使用factorial(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)

然后用factorial(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)]?

python variables recursion execution factorial
1个回答
0
投票

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

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   
© www.soinside.com 2019 - 2024. All rights reserved.