这个递归函数有什么问题?

时间:2017-07-28 14:58:51

标签: c++ recursion

我必须编写一个递归函数(不使用向量或字符串)来反转数字并返回它。例如,如果我输入35,它应该返回53.我的代码是(它不起作用):

int reverse( int number )
{
    if( number < 10 )
        return number;
    number = fmod(number,10);
    return reverse( number );
}

如果我输入35,例如,这段代码只给我5 ... 3?

会发生什么

3 个答案:

答案 0 :(得分:2)

你不能指望一个递归函数接受一个int并返回一个int并使最后一个数字成为第一个可以成功地反转一个数字。让我们想象f做到了,看看resp 1234和4123会发生什么。 如果你向右转,f(1234)应该返回f(4123),这是无意义的,因为我们知道它们将具有不同的值。如果你转向,以免f(4123)应该返回f(1234)表现出同样的问题。

这意味着递归函数应该至少有2个参数,而更简单的是number_to_convert, number_converted_so_far,因为现在当转换的数字没有更多的数字时,你有一个正确的停止点。

在你的代码中,问题是在第一次递归之后,你的号码只有一个数字(最后一个),所以其他所有数字都不可避免地丢失了。

答案 1 :(得分:1)

这是正确的功能。

int fun(int a)
{
    if(a<10)
    return a;

    int no=0,b=a;
    while(b)
    {
        no++;
        b/=10;
    }

    int l=a%10;

    return l*pow(10,no-1)+fun(a/10);

}

enter image description here

答案 2 :(得分:1)

您是否可以使用log10等数学库函数?

#include <math.h>

int reverse(int number) {
    if (number == 0) {
        return number;
    }

    return (number % 10) * pow(10, floor(log10(number))) + reverse(number / 10);
}