簡體   English   中英

這個函數被調用了多少次?

[英]How many times is this function called?

我有這個關於遞歸的子算法,我知道它被調用了 5 次,但我不明白為什么。 初始值為 m=1,n=2。

我認為該函數被調用了 7 次。

int Ack(int m, int n)
{
    if (m==0) 
        return n+1;
    else 
         {
            if (m>0 && n==0) 
                return Ack(m-1,1);
            else 
                return Ack(m-1,Ack(m,n-1));
        }
}

我預計它會被調用 7 次甚至更多,但實際數量是 5。

7 是這樣得出的:

  1. 確認(1,2)
  2. 確認(0,確認(1,1))
  3. 確認(1,1)
  4. 確認(0,確認(1,0))
  5. 確認(1,0)
  6. Ack(0,1),一個返回 2 的函數。 Ack(0,1)=Ack(1,0)=2 ==>
  7. Ack(0,2)(我們回到數字 4)= 3
  8. Ack(0,3)(我們回到了數字 2)

您重復計算了 2 個調用:#7 與 #4 相同,#8 與 #2 相同(僅顯示Ack返回的值):“回來”與調用不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM