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