我有一個任務,我有歐幾里德算法,需要做一個遞歸版本。我無法真正瞭解算法的遞歸版本是什麼,所以在這裏的任何幫助將非常感激! :)需要歐幾里德算法的遞歸版本
給定的算法是:
X ← MAX
Y ← MIN
while (Y != 0){
mod ← X mod Y
X ← Y
Y ← mod}
GCD ← X
我有一個任務,我有歐幾里德算法,需要做一個遞歸版本。我無法真正瞭解算法的遞歸版本是什麼,所以在這裏的任何幫助將非常感激! :)需要歐幾里德算法的遞歸版本
給定的算法是:
X ← MAX
Y ← MIN
while (Y != 0){
mod ← X mod Y
X ← Y
Y ← mod}
GCD ← X
遞歸實際上是非常相似的迭代
GCD(X,Y):
if Y == 0:
return X
else:
return GCD(Y, X mod Y)
如果'Y == 0'不會返回'X'?看起來像這樣只會返回0,因爲您終止遞歸的條件是'Y == 0 return 0'。 – asafreedman
謝謝你,我現在明白了我希望我一直這麼做。無法真正瞭解遞歸是什麼以及它是如何實現的。非常感謝! – user3083578
在這裏,我假設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);
}
}
你需要通過某種編程語言寫它表現出一定的努力,然後重新標記您的問題,有人可能會回答。 –
遞歸可以看作是一個循環機制。因此,請考慮如何將具有條件的'while'循環轉換爲具有基本情況的遞歸調用。 –
這是[遞歸](https://www.google.com/#q=recursion);) – Koryu