【问题标题】:Recursive function for reversing a number用于反转数字的递归函数
【发布时间】:2015-10-05 07:17:59
【问题描述】:

我的问题的陈述是这样的:

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

例如: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 数据类型的情况下解决此问题,并且仍然只在函数中保留一个参数。

【问题讨论】:

    标签: c recursion static reverse


    【解决方案1】:

    当然。只需从您的代码中删除单词static 并在循环中进行计算:

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

    【讨论】:

    • 谢谢你的回答,但我的函数必须是递归的。
    【解决方案2】:

    您可以将当前结果作为函数的参数:

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

    【讨论】:

    • 我认为int f(int x, int r = 0) 不会编译。顺便说一句,OP 说“在函数中仍然只保留一个参数。
    • 如果您使用 f(3120,0) 调用函数,它将使用 int f(int x, int r) 进行编译,但我需要该函数仅将我想要反转的数字作为参数.
    猜你喜欢
    • 2012-07-06
    • 1970-01-01
    • 2011-03-26
    • 2013-02-25
    • 2022-01-09
    • 2022-11-06
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多