【发布时间】:2011-04-10 08:45:10
【问题描述】:
有时它很简单(如果 self 调用是最后一个语句,它就是尾递归),但仍有一些情况让我感到困惑。一位教授告诉我“如果在自调用之后没有执行指令,那就是尾递归”。这些例子怎么样(忽略它们没有多大意义的事实):
a) 这个应该是尾递归的,看看self-call是怎么做的最后一个语句,之后就没有什么可以执行了。
function foo(n)
{
if(n == 0)
return 0;
else
return foo(n-2);
}
b) 但是这个呢?应该是尾调用,因为如果条件为真,除了它什么都不会被执行,但不是最后一条语句?
function foo(n)
{
if(n != 0)
return foo(n-2);
else
return 0;
}
c) 这个怎么样?在这两种情况下,self 调用都是最后执行的:
function foo(n)
{
if(n == 0)
return 0;
else
{
if(n > 100)
return foo(n - 2);
else
return foo(n - 1);
}
}
【问题讨论】:
标签: algorithm recursion tail-recursion tail-call