2 fasloww fasloww 于 2013.09.14 13:55 提问

C语言中的递归问题一个小小的疑惑

int GCD(int a,int b)
{ if(a%b==0)return b;
else return GCD(b,a%b);
}
求最大公约数。
把return GCD(b,a%b);去掉之后就错了。为什么?GCD 不是会调用自己的么? 最后不是一定会执行return b 的么?

1个回答

ll_0520
ll_0520   2013.09.14 21:48

在满足a%b==0之前,函数需要递归调用GCD,但是每次调用时参数a,b的值都不同,所以return GCD(b,a%b);不能去掉。

GCD 不是会调用自己的么?:你把return GCD(b,a%b);去掉它怎么调用自己......
最后不是一定会执行return b 的么?:只有当a%b==0才return b,不满足条件继续递归,每次递归时参数a,b会变化

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!