有時它很簡單(如果自我調用是最後一個語句,它是尾遞歸),但仍有一些情況令我困惑。一位教授告訴我,「如果在自助之後沒有執行的指令,那就是尾遞歸」。這些例子如何(忽略它們沒有多大意義的事實):如何識別什麼是,什麼不是尾遞歸?
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);
}
}