如何理解此涉及递归的Python代码的输出?

时间:2019-05-08 17:50:19

标签: python recursion

这是代码段:

(这只是我编写的示例代码,用于了解递归的工作原理,因此也涉及var和函数名。)

def b(t):
t += 1
print("t ", t)
for i in range(2):
    if (t <= 3):
        b(t)
print("t_again ", t)
return t

def a(): // call this function from main
    t = 0
    t1 = b(t)
    return t1

这就是我的输出:

t 1
t 2
t 3
t 4
t_again 4 //execute return statement after this

但是实际输出是:

t  1
t  2
t  3
t  4
t_again  4 # 1
t  4
t_again  4
t_again  3
t  3
t  4
t_again  4
t  4
t_again  4
t_again  3
t_again  2
t  2
t  3
t  4
t_again  4
t  4
t_again  4
t_again  3
t  3
t  4
t_again  4
t  4
t_again  4
t_again  3
t_again  2
t_again  1

我不明白为什么在打印上面注释为1的行后递归没有停止。

还有,为什么t的值最后会减小?

我认为问题是我不正确理解递归的概念。

2 个答案:

答案 0 :(得分:1)

因为这部分将打印1

print("t ", t)
for i in range(2):
    if (t <= 3):
        b(t)
print("t_again ", t)

然后再次转到功能b并打印2。

在案例4中达到最大递归债务后,它将再次打印“ 4”并返回,从递归深度4返回后,您的代码在深度3中,并显示“ 4”,“再次4”,“ 3”再次”并返回深度2 然后再做一次

答案 1 :(得分:0)

这不会解释递归,但是python的注释键入为“#”而不是“ //”。 Python不是c ++ / c / javascript / java。