2015-10-05 80 views
0

我的問題的聲明遞歸函數是這樣的:扭轉一些

寫遞歸函數,採用自然數作爲參數和返回倒着讀出數字的值(與對面的十進制數字順序):

如:f(3120) = 213

我已經解決了這個問題,但我以前static我的逆轉號碼存儲爲下面的代碼:

unsigned long f(unsigned long n){ 
    static long rev; 
    if(n==0) 
     return 0; 
    else    
     { 
      rev=rev*10+n%10; 
      f(n/10); 
     } 
    return rev;   
} 

但我想知道是否有辦法解決這個問題,而不使用static數據類型,仍然只保留一個參數在函數中。

回答

2

當然。剛剛從你的代碼中刪除字static,做calulations在循環:

unsigned long f(unsigned long n){ 
    long rev = 0; 
    while(n != 0) { 
     rev = rev*10 + n%10; 
     n /= 10; 
    } 
    return rev; 
} 
+1

謝謝你的回答,但我的功能必須遞歸。 –

1

你可以把當前的結果作爲函數的參數:

int f(int x, int r = 0) 
{ 
    if (x == 0) return r; 
    return f(x/10, r * 10 + x % 10); 
} 
+0

我不認爲'int f(int x,int r = 0)'會編譯。順便說一句,OP說:「_still只保留一個參數在函數中。」 –

+0

如果你用f(3120,0)調用函數,它會用int f(int x,int r)編譯,但是我需要函數作爲參數只有我想要反向的數字。 –

0
int f(int n){ 
    if(n == 0) return 0; 
    int exponent = 0; 
    int temp_n = n; 
    while(temp_n) { 
     temp_n /= 10; 
     exponent++; 
    } 
    return (n%10)* (int) pow(10, exponent-1) + f(n/10); 
} 

包括pow()功能math.h頭。

+0

[ideone](http://ideone.com/gYdi3N) –