gpt4 book ai didi

C 递归函数 - GCD

转载 作者:行者123 更新时间:2023-11-30 16:53:06 25 4
gpt4 key购买 nike

我最近开始学习 C 语言和一般编程,我们被告知要制作一个程序,使用递归查找两个数字的 GCD 和 LCM。

现在,经过一番磨练,我终于把它组合在一起了。

#include<stdio.h>

int gcd(int a,int b);

int main()
{
int a,b,l,temp;
printf("Enter two numbers :\n");
scanf("%d%d",&a,&b);
if(a<b)
{
temp=a;
a=b;
b=temp;
}
l=gcd(a,b);
printf("GCD = %i\nLCM = %i",l,a*b/l);

return 0;
}

int gcd(int a,int b)
{
static int c;
c=a%b;
a=b;
b=c;
if(c!=0)
{
gcd(a,b);
}
else
return a;
}

现在由于某种我不知道的原因,如果没有“else”,该函数将无法工作。更具体地说是这样的:

int gcd(int a,int b)
{
static int c;
c=a%b;
a=b;
b=c;
if(c!=0)
{
gcd(a,b);
}
return a;
}

虽然与作业无关,但我觉得我应该理解这里的问题是什么。作为一名新手,我将不胜感激任何和所有的帮助。

如果问题太愚蠢或代码太困惑,我提前道歉。

最佳答案

问题是递归调用:

int gcd(int a,int b)
{
static int c;
c=a%b;
a=b;
b=c;
if(c!=0)
{
gcd(a,b); // The problem is here
}
else
return a;
}

您采用了两种不同的方法:

  1. 在上述情况下,如果 c!=0 则没有 return 语句。您的函数必须返回 int。通常编译器会给你一个警告,因为你会返回一个随机数 see here 。因此,假设您的 else 函数能够正常工作是幸运的。
  2. 如果没有 else 语句,您将始终返回 a。您计算 gcd 但您永远不会使用结果,因此第一次调用的结果将始终是 main 的 a 和 b 之间较小的数字。您需要使用递归调用的结果来使函数正常工作。

正确的方法是返回递归调用的结果,就像 Sanjay-sopho 已经说过的那样:

return gcd(a,b);

此外,在 if 上使用大括号而在 else 上不使用大括号是不好的编码风格;)两种情况都很好,但要保持相同。

关于C 递归函数 - GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40993822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com