我剛剛開始練習遞回我有一個非常簡單的練習程式問題。
有兔子排成一排,編號為 1,2,3... 奇數兔子 (1,2,3..) 有正常的 2 個耳朵。
偶數兔子 (2,4,6...) 有 3 個耳朵,因為它們每個都有一只抬起的腳。遞回回傳兔子線中耳朵的數量。
我有解決方案。但是,我對某些事情有點困惑。首先,我的理解是每只偶數兔子有 3 英尺。所以 bunnyEars2(2),應該產生 6 而不是 5?
另外,我注意到如果我洗掉了某些復雜的東西,比如 '(bunnyEars2(bunnies)' 而不是在最后添加 '-1'。我在 bunnyEarsTwo.bunnyEars2(bunnyEarsTwo.java:13) 上收到了這個重復的訊息。
非常感謝對這個問題和遞回的任何解釋和分解。下定決心學習,只求指點迷津!
public static int bunnyEars2(int bunnies){
if(bunnies==0) return 0;
return (bunnies % 2 == 0) ? (3 bunnyEars2(bunnies-1)) : (2 bunnyEars2(bunnies-1));
}
uj5u.com熱心網友回復:
我希望你通過遞回知道階乘。因為這非常相似。
int factorial(int n){
if (n == 0)
return 1;
else
return(n * factorial(n-1));
}
這里我們回傳 `n * n-1 * n-1-1 * n-1-1-1 等等,直到它 n-1.... 是 0。
同樣,
public static int bunnyEars2(int bunnies){
if(bunnies==0)
return 0;
if (bunnies % 2 == 0)
return 3 bunnyEars2(bunnies-1);
else
return 2 bunnyEars2(bunnies-1);
}
在這里,遵循相同的邏輯,但不同的是,
當它是偶數時,它回傳3 bunnyEars2(bunnies-1)
奇數,它回傳2 bunnyEars2(bunnies-1)
例如:bunnyEars2(4)在10
這里我們的兔子值將是4,3,2,1,0
4 是偶數它回傳3 ,3 是奇數它回傳2 ,2 回傳3 ,1回傳2 和 0 回傳0
3 2 3 2 0 = 10.
bunnyEars2(2)將是5,這里的兔子值將是2,1,0回傳3 2 0 = 5
也洗掉-1frombunnyEars2(bunnies-1)將導致無限遞回(堆疊溢位錯誤)。這就像洗掉-1從n * factorial(n),它不會結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328826.html
上一篇:遞回-查找串列中最長的字串
