在python中使用递归时的循环流

时间:2018-10-02 00:40:25

标签: python recursion

我担心使用递归时Python中的循环流如何工作(不要介意函数,只是学习循环流)

def factorial(n):
    print("first line")
    if n == 1 or n == 0:
        return 1

    result = n * factorial(n-1)
    print('line after result')
    print('current result is ' + str(result) )
    print('before return result')
    return result

在我的示例中,我使用了factorial(3),它是这样的:

first line
first line
first line
line after result
current result is 2
before return result
line after result
current result is 6
before return result
6

在计算/返回结果后,我为什么会在结果后得到三遍。我不应该在结果之后只得到一次吗?循环返回多少次结果?我不明白递归循环流如何在python中工作。请帮忙。谢谢

2 个答案:

答案 0 :(得分:1)

您有line after result次2次(而非3次)。在递归调用期间,每次返回时都会打印此行。

  1. 您致电factorial(3)。 Python打印"first line"并运行函数factorial(2)
  2. Python打印"first line"并调用factorial(1)
  3. Python打印"first line"并返回1;
  4. 从步骤3获取结果并打印line after result;
  5. 从步骤2获取结果并打印line after result;
  6. 从步骤1获取结果。

答案 1 :(得分:0)

在n == 1 return语句的情况下使用print语句,则仅在n = 3和n = 2的情况下(在您的示例中)打印after语句。对于n = 1,则不会打印