c - 在 C 中使用递归反转数字函数

标签 c function recursion reverse

以下是一个函数,旨在使用递归返回数字的反转。但是,它只返回数字的最后一位。我想知道为什么以及如何解决它?

int rev(int number)
{
      int revNum=0, sum=100;

      if(number<=9) return(number);
      else if(number>0) 
      {
           return(rev(number/10)+revNum);
           revNum=(number%10)*sum; sum=sum/10;

      }
}

谢谢!!!

最佳答案

这是一些工作代码:

int rev (int number){
    int base = 1;

    while (number / (base * 10)){/*
        * This calculates the base of the number
        * ie number = 435
        *    base   = 100
        */
        base *= 10;
    }

    if (number <= 9){
        return number;
    } else if (number >= 10){ // notice different expression
        int revNum = (number % 10) * base; // this was out of order
        return rev (number / 10) + revNum;
    }
}

除我上面评论的内容外,您的代码无法运行的主要原因是调用中未保留 sum。这是制作递归函数的常见问题。

为了解决这个问题,“基数”是在每次函数调用时计算的,而不是固定值。这也好一点,因为它允许传递更大的数字,而不是不大于 100(您选择的代码的另一个限制)的数字。

另一种实现方式是将基数作为第二个参数,这样就不必在每次函数调用时都重新计算它。然而,这可以通过一个简单的宏轻松解决。电话可能是:

int rev_number (int number, int base){ .. }

但是a可以方便的放在宏中(或者其他函数调用):

#define rev(num) rev_number (number, 0)

这样效率更高一些,但差异可能重要也可能不重要。

关于c - 在 C 中使用递归反转数字函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17715918/

相关文章:

java - 在try-catch block 中进行递归调用以重试N次

c - 对哨兵使用线性搜索有什么意义?

c - 指向以指向 typedef 类型的指针为模型的整数类型的指针

javascript - 使用 React 在客户端组件中发布和更新计数

python - 在不复制代码的情况下访问函数中声明的所有变量

c - 用边长为 2^K, 2^(K - 1), ..., 4, 2, 1 的正方形填充 M x N 矩形

c - c中插入链表

c++ - CImg 编译器错误

javascript - Eloquent javascript 表格绘制函数 - drawRow 参数

django - Django Model中的抽象继承,导致MAX递归深度错误