用于反转数字的递归函数

时间:2015-10-05 07:18:00

标签: c recursion static reverse

我的问题陈述是:

  

编写一个递归函数,该函数将自然数作为参数,并返回向后读取的数字的值(以相反顺序的十进制数字):

     

例如: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 个答案:

答案 0 :(得分:2)

当然。只需从代码中删除单词static,然后循环执行计算:

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);
}