2015-11-02 105 views
-3

我的遞歸查找反向代碼說分割錯誤 爲什麼?以及如何通過遞歸找到反向? 我的代碼有什麼問題?遞歸反向

#include<stdio.h> 
int rev(int); 
main() 
{ 
    int a,b; 
    scanf("%d",&a); 
    b=rev(a); 
    printf("%d",b); 
} 
int rev(int x) 
{ 
    int q,r; 
    static int p=0; 
    p=p*10+(x%10); 
    r=x/10; 
    q=rev(r); 
    return(p); 
} 
+4

使用調試器! – CinCout

+1

或至少'printf's。 –

+2

嗯,首先你有沒有條件來結束遞歸 – AudreyM

回答

1

您正在使用q=rev(r);不附加任何條件,即你跳越來越深地陷入遞歸調用,這永遠不會結束。

最後,你會得到一個堆棧溢出。

0

添加任何斷裂條件在你的代碼中,你修訂版()函數

if x == 0: 
     return 0 
+0

Okk謝謝大家 – Abhishek

1

遞歸函數需要一種方法來知道什麼時候該遞歸結束。這被稱爲基本案例。沒有基礎的情況下,遞歸將繼續發生,直到您用完堆棧空間,這通常會導致您的程序崩潰。

爲您的代碼,你想離開時,參數爲0。所以,你需要這樣的:

int rev(int x) 
{ 
    int q,r; 
    static int p=0; 
    if (x == 0) return; // base case 
    p=p*10+(x%10); 
    r=x/10; 
    q=rev(r); 
    return(p); 
}