2017-10-11 53 views
0

錨情況下定義如下:所述參數的一個或多個值被指定錨病例定義

的函數的值。

現在讓我們來看看遞歸階乘函數:

int fact(int n) 
{ 
    if (n == 0) 
     return 1; 
    else 
     return n * fact(n - 1); 
} 

我明白這一點:「被指定功能的價值......」 我得到的;當函數達到錨案時,它只返回1.

我不明白的是,該函數的值是如何「爲一個或多個參數值指定的」?

定義是在談論函數參數還是參數的數學術語?當運行時棧被彈出時,我只是看不到函數的值是爲[function]參​​數的一個或多個值指定的。

+0

Thia定義看起來不對我,我認爲基本情況應該返回1,否則每個輸入將返回零。 –

回答

0

某些遞歸函數具有多個基本情況。例如,Fibonacci序列爲輸入01指定了值,併爲更高的值遞歸。

unsigned int fib(unsigned n) { 
    if (n == 0 || n == 1) { 
     return 1; 
    } else { 
     return fib(n-1) + fib(n-2); 
    } 
} 
+0

我明白了。我真正不明白的是,如果在歸納案例中,fib(n-1)在歸納案例中被替換爲1併成爲「return 1 + fib(n-2)」,那麼我們可以說函數值是爲參數值指定的?換句話說,在這種情況下,在歸納情況下「fib(n-1)+ fib(n-2)」是否被認爲是參數? –

+0

我不確定你在問什麼。唯一的參數是'n'。在歸納情況下,您可以使用不同的參數「n-1」和「n-2」再次調用該函數。 – Barmar

+0

當教科書顯示「指定」時,這意味着該輸入有預定義的結果,而不必使用歸納法進行計算。 – Barmar

0

這是指功能參數。這是該函數的靜態屬性;它在運行時與瞬態狀態無關。 「當運行時堆棧彈出時」不是問題。

這個概念是,每個遞歸必須使我們更接近答案。這意味着在調用樹的底部必須有一個絕對的(不是遞歸的)值。這個答案就是主播案例。

某些進程只有一個錨。斐波那契有兩個。有些具有更多,取決於該特定過程的「底部」。