//计算a 与 b 的最大公约数并返回
int GCD(int a, int b)
{
if(a == b)
return a;
else if(a>b)
return GCD(a - b, b);
else
return GCD(a, b - a);
}
int main()
{
int a,b,y;
printf("Input two positive integers,a,b:\n");
scanf("%d,%d",&a, &b);
if(a<=0 || b<=0)
{
printf("Input error!");
}
else
{
y = GCD(a,b);
printf("GCD= %d",y);
}
return 0;
}
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出