我是编程新手,只是一名学生。
我编写了一个使用递归函数计算两个数字的GCD的程序,但是它为一些人提供了正确的答案,而对于其他一些人给出了错误的答案。请帮助我找出问题所在:
#include<stdio.h>
#include<conio.h>
int gcd(int,int,int)
int main(){
int a,b,x,val;
printf("Enter the first number: ");
scanf("%d",&a);
printf("Enter the second number: ");
scanf("%d",&b);
if(a>b)
x=b;
else
x=a;
val=gcd(a,b,x);
printf("The GCD of the two numbers you entered is:%d",val);
getch();
return 0;
}
int gcd(int a,int b,int x){
if(a%x==0){
if (b%x==0)
return x;
}else
return gcd(a,b,x-1);
}
例如,当第一个数字= 69,第二个数字= 65时,程序给出错误答案,而在其他一些情况下,它会神秘地给出正确的答案。
有人可以帮助我吗?
答案 0 :(得分:1)
检查您的代码路径。并非所有条件都在gcd函数中返回一个整数。 你使用的是哪个编译器?它应该给你一个警告或错误。
答案 1 :(得分:1)
试试这个:
int gcd(int a,int b,int x){
if(a%x==0 && b%x==0) return x;
}else return gcd(a,b,x-1);
}
这在一个if语句中捕获模数比较为0,所有条件都不属于此get gcd调用。
答案 2 :(得分:0)
示例:考虑数字a=100
和b=44
。当它达到x=25
时,除以100,而不是44,您的代码没有正确的路径。
您没有考虑所有条件(路径)。
int gcd(int a,int b,int x){
if(a%x==0){
if (b%x==0)
return x;
else
// ERROR ERROR ERROR,
// if the code reaches here, then it neither calls gcd recursively,
// nor does it return anything valueable
}else
return gcd(a,b,x-1);
}
您应该更改以下代码。
int gcd(int a,int b,int x){
if(a%x==0)
if (b%x==0)
{
return x;
}
return gcd(a,b,x-1);
}
OR
int gcd(int a,int b,int x){
if(a%x==0 && b%x==0) return x;
return gcd(a,b,x-1);
}
答案 3 :(得分:0)
C中两个数字的GCD(最简单的方法):
while(secNum != 0) {
Temp = fNum % secNum;
fNum = secNum;
secNum = Temp;
}
printf("GCD of the given two numbers : %d",fNum);