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