下面是一个使用递归返回一个数字的倒数的函数。但是,它只返回数字的最后一位。我想知道为什么以及如何修复它?
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;
}
}
谢谢!
发布于 2013-07-18 14:55:41
下面是一些有效的代码:
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
没有保留在调用中。这是制作递归函数时的一个常见问题。
为了解决这个问题,每个函数调用都会计算"base“,而不是有一个固定值。这也更好一些,因为它允许传递更大的数字,而不是不大于100
的数字(您选择的代码的另一个限制)。
另一个实现是将base作为第二个参数,这样就不必在每次函数调用时都重新计算它。然而,这可以很容易地通过一个简单的宏来解决。调用可能是:
int rev_number (int number, int base){ .. }
但是a可以方便地放在宏中(或其他函数调用中):
#define rev(num) rev_number (number, 0)
这会更有效一点,但区别可能很重要,也可能不重要。
发布于 2014-07-25 19:35:52
这就是解决方案。
调用下面的函数作为reverse (number, 0);
int reverse(long int n, long int rev) {
if(n == 0)
return rev;
return reverse(n / 10, rev * 10 + n % 10);
}
发布于 2013-07-18 15:20:11
int rev(int num){
return num < 10 ? num : (num % 10) * pow(10, (int)log10(num)) + rev(num/10);
}
而且它是在一行中完成的。
https://stackoverflow.com/questions/17715918
复制相似问题