这次递归发生了什么?

时间:2017-12-11 07:58:27

标签: python recursion

我写了这段代码来理解某种算法。但我仍然不知道递归是如何在这里工作的。任何人都可以向我解释一下。我理解输出直到它第一次打印的第5行"它来到这里",但在那之后它对我来说有点混乱。 代码:

def empty(n):
    print("recur ",n)
    if(n==1):
        print("end")
        return(0)
    empty(n-1)
    print("It got here")
    empty(n-1)

当我调用此函数时

empty(3)

这是我得到的输出

recur  3  
recur  2  
recur  1  
end  
It got here  
recur  1  
end  
It got here  
recur  2  
recur  1  
end  
It got here  
recur  1  
end  

1 个答案:

答案 0 :(得分:0)

每个函数调用都会执行以下操作:

  • 将参数打印为当前递归深度的指示符
  • 递归调用函数
  • 打印“它到了那里”
  • 再次递归调用该函数(与上述两步相同的输出)

如果用空行分隔这些输出块,它看起来像这样:

recur 3

recur 2
recur 1
end
It got there
recur 1
end

It got there

recur 2
recur 1
end
It got there
recur 1
end

以下块出现了2次:

recur 2
recur 1
end
It got there
recur 1
end

它以同样的方式构建:

recur 2

recur 1
end

It got there

recur 1
end

使用缩进可视化递归深度时,输出可能如下所示:

recur 3
    recur 2
        recur 1
        end
    It got there
        recur 1
        end
It got there
    recur 2
        recur 1
        end
    It got there
        recur 1
        end