2013-12-09 29 views
-1

我有一個任務,我有歐幾里德算法,需要做一個遞歸版本。我無法真正瞭解算法的遞歸版本是什麼,所以在這裏的任何幫助將非常感激! :)需要歐幾里德算法的遞歸版本

給定的算法是:

X ← MAX 
Y ← MIN 
while (Y != 0){ 
    mod ← X mod Y 
    X ← Y 
    Y ← mod} 
GCD ← X 
+0

你需要通過某種編程語言寫它表現出一定的努力,然後重新標記您的問題,有人可能會回答。 –

+0

遞歸可以看作是一個循環機制。因此,請考慮如何將具有條件的'while'循環轉換爲具有基本情況的遞歸調用。 –

+0

這是[遞歸](https://www.google.com/#q=recursion);) – Koryu

回答

2

遞歸實際上是非常相似的迭代

GCD(X,Y): 
    if Y == 0: 
    return X 
    else: 
    return GCD(Y, X mod Y) 
+1

如果'Y == 0'不會返回'X'?看起來像這樣只會返回0,因爲您終止遞歸的條件是'Y == 0 return 0'。 – asafreedman

+0

謝謝你,我現在明白了我希望我一直這麼做。無法真正瞭解遞歸是什麼以及它是如何實現的。非常感謝! – user3083578

0

在這裏,我假設X> = Y> 0,

本質上遞歸正在用較小的X'和Y'解決問題,直到答案很明顯(這裏X'= Y和Y'= X%Y)。

歐幾里得的解決最大公約數(GCD)的遞歸版本的算法是(C版本):

int GCD(X, Y) 
{ 
    if ((X % Y) == 0) 
    { 
     return Y; 
    } 
    else 
    { 
     return GCD(Y, X % Y); 
    } 
}