2014-01-14 102 views
0

我是新來的遞歸和我的老師給了我們這樣的代碼來檢查:需要一些幫助解釋這個遞歸碼

public long rudolph(long a, long b){ 
if(b==0) 
    return a; 
else 
    return rudolph(b, a % b); 
} 

我嘗試用不同的值的遵循邏輯,每一次B,而我無法理解結果。如何解決這個問題而不運行它?基本上試圖弄清楚這個代碼通常會做什麼。

例如:

if a = 9 and b = 7: 
return rudolph(7,2); 
return rudolph(2,1); 
return rudolph(1,0); 
return 1 

if a = 10 and b = 5: 
return rudolph(5,0); 
return 5 

if a = 5 and b = 2: 
return rudolph(2,1); 
return rudolph(1,0); 
return 1 
+0

向我們展示你計算 –

+3

的最後一個例子是不正確的什麼值。 – Henry

+1

http://en.wikipedia.org/wiki/Euclidean_algorithm – Pshemo

回答

1

最好的辦法是在每一個來電,就能獲得A和B一張紙和一支鉛筆和記錄值。從小(er)開始(例如a = 2,b = 3),查看遞歸停止的位置和方式,然後從那裏開始工作。

編輯:告訴我們你已經嘗試過,如果你真的無法弄清楚(懶惰和真正不理解之間的區別),我們可以嘗試指引你在正確的方向。

+0

感謝您的回覆,我添加了我的嘗試。 – user3195991

+0

@ user3195991您在魯道夫(5,2)上犯了一個錯誤。 5%2 = 1,而不是2. –

+0

@ user3195991因此您發佈的所有示例都是正確的。你看到最終值是什麼意思嗎? –