問題:給定兩個整數a和b,求解他們的最大公約數。遞歸
求解方法網上已經有不少資料,這裏只是談談求解方法的證實:方法
a能夠寫成a=kb+r(0<=r<b),這裏設最大公約數永爲正數,所以無論a、b的正負性,也無論a的絕對值是否小於b的絕對值(當小於時k爲0,r等於a,最終的效果是同樣的)。假設c是公約數,則a=mc,b=nc,r=a-kb=mc-knc=(m-kn)c,m-kn必定是個整數,所以c是a、b、r的公約數,進一步獲得a與b的公約數等於b與r的公約數,即a mod c = b mod c = r mod c = 0,簡化成符號表示爲cd(a,b)=cd(b, a mod b)。
下面是如何求得最大公約數,假設a mod b不爲0則繼續使用該公式b變成a,a mod b變成b,最後成爲cd(b, a mod b)=cd(a mod b,b mod (a mod b)),這就是遞歸公式。那麼最後假設a mod b等於0,那就是說明a與b的公約數就是b,而這個b也是求得的最大公約數,所以遞歸公式中止的條件是a mod b=0。