递归求俩数字的大数不成功?


#include 
using namespace std;
int main() {
     long gcd1(int a,int b)
  {
      if(a%b==0)
      return b; 
  return gcd1(b,a%b);
   }
}

参考GPT和自己的思路:

这段代码是有问题的,因为在main函数中定义了一个函数gcd1,但是并没有调用它。而且,该函数在定义时不应该嵌套在main函数中,应该在main函数之外定义。另外,需要注意的是,当a和b较大时,该递归求最大公约数的算法可能会导致栈溢出,因此需要采用循环迭代的方法改进。

函数的定义不能嵌套,把gcd写在外面

一笔一划手工帮你写的,非AI!!!!!

#include <iostream>
using namespace std;
long gcd(int x, int y)
{
    if (y)            
            return gcd(y, x%y);        
        else            
            return x;
} 
int main()
{
cout << gcd(15,12) << endl;
}

参考GPT和自己的思路:

根据你提供的代码,有以下问题:

  1. 函数gcd1没有在main()函数外定义,应该将函数定义拿出来单独定义。

  2. 函数gcd1的返回值类型应该为long

  3. 在递归条件判断中,应该先判断b是否等于0,因为如果b等于0,那么a%b会出现除以0的错误。

改正过的代码如下:

1. #include <iostream>
2. using namespace std;
3. long gcd1(int a,int b)
4. {
5.     if(b==0)
6.         return a;
7.     return gcd1(b,a%b);
8. }
9. int main() {
10.     int a, b;
11.     cout << "请输入两个数字:";
12.     cin >> a >> b;
13.     cout << "它们的最大公约数为:" << gcd1(a, b) << endl;
14.     return 0;
15. }

在这个修正后的代码中,gcd1函数先判断b是否等于0,若是则返回a,否则递归调用函数并返回结果。main函数中输入两个数字,调用gcd1函数求它们的最大公约数,并输出结果。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^