2015-10-05 53 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) –