作者nahawa (无)
看板C_and_CPP
标题[问题] 请教ㄧ个递回求最大公因数
时间Sun Mar 22 22:22:22 2009
#include <stdio.h>
#include <stdlib.h>
int gcd(int x,int y);
int main()
{
int x,y;
printf("请输入两个数字\n");
printf("X:");
scanf("%d",&x);
printf("Y:");
scanf("%d",&y);
printf("gcd:%d",gcd(x,y));
system("PAUSE");
return 0;
}
int gcd(int x,int y)
{
if(x!=0 && y!=0){
if(x>y)
gcd(y,(x%y));
if(y>x)
gcd(x,(y%x));
}
else{
if(x==0)
return y;
else
return x;
}
}
会什麽我最後print出来的值都是-1
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.114.169.183
1F:→ Nessa1103:在电脑里,-1是最大的数,这牵涉到补数的概念 03/22 22:35
2F:→ nahawa:可是假如最後不return回去main 直接print出来的值就正常 03/22 22:37
3F:→ tsaiminghan:你的递回有问题。 03/22 23:13
4F:→ nahawa:可以点一下那里出错了吗? 03/22 23:17
5F:推 tsaiminghan:我觉得前面两个gcd也要加上return 03/22 23:18
6F:推 StarTouching:理论上不会编译过 原因在楼上 03/22 23:22
7F:→ StarTouching:说一下你的compiler OS和测资 03/22 23:23
8F:→ nahawa:我用dev-c++ 4.9.9.2 编译可以过 03/22 23:23
9F:推 zptdaniel:可以过,在函数里面的两个gcd前面加上return 答案就对了 03/22 23:30
10F:→ nahawa:如tsaiminghan所说 加上return後正常了,请问一下加上 03/22 23:30
11F:→ zptdaniel:不过究竟为什麽会出现-1...真奇妙 03/22 23:30
12F:→ nahawa:请问有加return跟没加差在哪里? 03/22 23:31
13F:推 tsaiminghan:你想想看递回是怎麽运作的?你不加return 的话 03/22 23:33
14F:→ tsaiminghan:除了最後一层,其他层都没有回传值 03/22 23:34
15F:→ tsaiminghan:不过我也很好奇为什麽会回传-1,难道是预设值? 03/22 23:34
16F:→ tsaiminghan:编译器自已加的? 03/22 23:35
17F:推 StarTouching:我认为要看GNU compiler怎麽运作的 03/22 23:41
18F:→ StarTouching:因为理想上应该连compile都不能过才对 03/22 23:42
19F:推 Ebergies:一向都只会有 warning, 如果走到没 return 的就是 未定义 03/22 23:47