
這張圖片中寫的函式是為了解釋遞回。它說該函式需要 T(n) 時間來運行,但它包含一個遞回呼叫,然后它需要 T(n-1) 時間來運行。但是我們知道函式需要 T(n) 時間并且執行相同的函式呼叫,然后它應該再次需要 T(n) 時間,因為函式和以前做同樣的事情。請告訴我是我對概念的理解有誤,還是代碼中對概念的解釋有誤。
uj5u.com熱心網友回復:
圖片是這個
void Test(int n) {
if (n > 0) {
printf("%d",n); // 1
Test(n-1); // T(n-1)
}
}
// T(n) = T(n-1) 1
顧名思義,T(n)就是 花費的時間Test(n)。也T(n-1)只是“通話時間”的標簽Test(n-1)。
由于函式只呼叫了printf常數復雜度的函式,算作1條指令,呼叫Test(n-1),其總運行時間為T(n) = T(n-1) 1。
但是我們知道函式需要 T(n) 時間并且執行相同的函式呼叫,然后它應該再次需要 T(n) 時間,因為函式和以前做同樣的事情。
不,T(n-1)不一樣,T(n)因為Test(n)不做同樣的事情Test(n-1)。Test(n)與Test(n-1)plus 呼叫printf一次相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318701.html
