2013-10-24 44 views
0

我爲學校寫了下面的C代碼,我似乎無法找出爲什麼它返回0.我必須使用遞歸數字和功率函數來遞歸地反向輸入數字(反向函數必須是1參數函數):我的代碼返回0實際上它應該返回輸入的反向

#include<stdio.h> 

int digits(int x) 
{ 
    if(x!=0) 
     return 1 + digits(x/10); 
    else 
     return 0; 
} 

int power(int x,int y) 
{ 
    if(y!=1) 
     return x*power(x,y-1); 
    else 
     return x; 
} 

int reverse(int x) 
{ 
    static int nr=0; 
    if(digits(x)!=1) 
     return nr + power(10,digits(x)-1)*(reverse(x/10)%10); 
    else 
     return x; 

} 

int main() 
{ 
    int x; 
    scanf("%d",&x); 
    printf("%d\n",reverse(x)); 
    return 0; 
} 
+0

'nr'始終爲0 – SLaks

+0

你可以通過把一些printf語句到每個函數的詳細參數調用啓動然後返回值 – KeepCalmAndCarryOn

+0

就像一個想法:使用一個單一循環和完全可重入的'reverse'的迭代實現只有少數幾行,並且可能更容易o比你的遞歸方法更合理。 –

回答

1

你幾乎沒有錯,唯一錯誤的是你如何連接遞歸輸出。

只是改變:

return nr + power(10,digits(x)-1)*(reverse(x/10)%10); 

到:

return power(10,digits(x)-1)*(x%10) + (reverse(x/10)); 
0
int reverse(int x) 
{ 
    if (!(x/10)) 
     return x; 
    else 
     return (x % 10) * power(10,digits(x/10)) + reverse(x/10); 
} 
相關問題