#include<iostream>
using namespace std;
int rec_gcf(int x, int y,int validity=0)
{
if ((0 >= x || 0 >= y) && 0 == validity)//此处判断初始输入的有效性
{
cout << "error!" << endl;
return 0;
}
if (0 == y)
return x;
return rec_gcf(y, x % y,1);
}
int main()
{
cout << rec_gcf(58, 42) << endl;
cout << rec_gcf(256, 120) << endl;
cout << rec_gcf(72, 120) << endl;
cout << rec_gcf(2018, 1086) << endl;
return 0;
}
递归法求最大公因数:
辗转相除法理论:
1:Xn=a*m
2:Yn=b*m
3:Xn%Yn=c*m
4:a,b互质或a=1||b=1成立
5:c=a%b,假定a>b,当且仅当b=1时c=0
6:当Xn<Yn时,Xn%Yn=Xn,故递归条件为Xn=Yn,Yn=Xn%Yn;递归终止条件Yn=0