有时它很简单(如果自我调用是最后一个语句,它是尾递归),但仍有一些情况令我困惑。一位教授告诉我,“如果在自助之后没有执行的指令,那就是尾递归”。这些例子如何(忽略它们没有多大意义的事实):如何识别什么是,什么不是尾递归?
a)这一个应该是尾递归的,看看自我调用是最后一个语句,并且在它之后没有什么可以执行的。
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)这个怎么样?在这两种情况下,自我呼叫将是最后执行的事情:
function foo(n)
{
if(n == 0)
return 0;
else
{
if(n > 100)
return foo(n - 2);
else
return foo(n - 1);
}
}