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

时间:2019-02-25 10:08:23

标签: python variables recursion execution factorial

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

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)

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

1 个答案:

答案 0 :(得分: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