为什么这个程序不起作用?这是使用递归函数的简单最常见的除数程序。它编译没有错误,但是当我运行program.exe它只是崩溃:“程序已停止工作”。我在codeblocks和Notepad ++上尝试过它。我使用gcc编译器。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int gcd(int,int);
int main(int argc,const char* argv[]){
int a;
int b;
a = atoi(argv[1]);
b = atoi(argv[2]);
printf("The greatest common divisor of %d and %d is %d\n",a,b,gcd(a,b));
return 0;
}
int gcd(int a,int b){
if(a==0)
return a;
else
return gcd(b, a%b);
}
答案 0 :(得分:4)
您有此错误:
if(a==0)
应该是
if(b==0)
您想检查除数不是0
,而不是被除数。
答案 1 :(得分:0)
在你的程序中,你需要添加一个&gt; b条件的检查以消除除以0的问题
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int gcd(int,int);
int main(int argc, char ** argv[]){
int a;
int b;
int c;
a = atoi(argv[1]);
b = atoi(argv[2]);
if (a<b)
{ //swapping if a<b
c=a;
a=b;
b=c;
}
printf("The greatest common divisor of %d and %d is %d\n",a,b,gcd(a,b));
return 0;
}
int gcd(int a,int b){
int r1=a%b;
while(r1>0)
return gcd(b,r1);
return b;
}