C语言 if(!a || !b) return a + b

2025-02-25 20:42:59
推荐回答(3个)
回答1:

int gcd(int a, int b)
{
if (!a || !b) return a + b; //如果!a或!b不为0,即a或b为0,返回数值a+b
if (a > b) return gcd(b, a % b); //如果a、b均不为0(不满足上一个if语句才能进行这个语句)且a>b,返回gcd(b, a % b) (a % b表示a除以b的余)
return gcd(a, b % a); //如果a、b均不为0且a<=b(即不满足以上两个if语句),返回gcd(a, b % a)

回答2:

这是一个递归函数
跳出条件是:a b中有一个为0,就返回a+b

当a>b gcd(b, a % b);
当a<=b gcd(a,b%a) 这是保证大数放在第一个参数上

没说错的话,这是欧几里德求最大公约数的算法吧,你可以根据算法的说明再看程序代码,就会明白。
告诉你一个看这种代码的方法:
选两个不同的整数,然后设置断点,或者用笔记录,跟踪代码运行的过程,你就会发现,运行的具体过程和真正的目的!

回答3:

int gcd(int a, int b)
{
if (!a || !b) return a + b;//a b中有一个为0,就返回a+b
if (a > b) return gcd(b, a % b);//这里是a,b都不为0的情况下,递归调用gcd.
return gcd(a, b % a);
}