作者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