看板 C_and_CPP 關於我們 聯絡資訊
#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
Nessa1103:在電腦裡,-1是最大的數,這牽涉到補數的概念 03/22 22:35
nahawa:可是假如最後不return迴去main 直接print出來的值就正常 03/22 22:37
tsaiminghan:你的遞迴有問題。 03/22 23:13
nahawa:可以點一下那裡出錯了嗎? 03/22 23:17
tsaiminghan:我覺得前面兩個gcd也要加上return 03/22 23:18
StarTouching:理論上不會編譯過 原因在樓上 03/22 23:22
StarTouching:說一下你的compiler OS和測資 03/22 23:23
nahawa:我用dev-c++ 4.9.9.2 編譯可以過 03/22 23:23
zptdaniel:可以過,在函數裡面的兩個gcd前面加上return 答案就對了 03/22 23:30
nahawa:如tsaiminghan所說 加上return後正常了,請問一下加上 03/22 23:30
zptdaniel:不過究竟為什麼會出現-1...真奇妙 03/22 23:30
nahawa:請問有加return跟沒加差在哪裡? 03/22 23:31
tsaiminghan:你想想看遞迴是怎麼運作的?你不加return 的話 03/22 23:33
tsaiminghan:除了最後一層,其他層都沒有回傳值 03/22 23:34
tsaiminghan:不過我也很好奇為什麼會回傳-1,難道是預設值? 03/22 23:34
tsaiminghan:編譯器自已加的? 03/22 23:35
StarTouching:我認為要看GNU compiler怎麼運作的 03/22 23:41
StarTouching:因為理想上應該連compile都不能過才對 03/22 23:42
Ebergies:一向都只會有 warning, 如果走到沒 return 的就是 未定義 03/22 23:47