递归返回完整值

时间:2020-06-07 07:26:55

标签: c++ function recursion

我已经编写了一个C ++代码,可以将以10为底的数字转换为以2为底的数字,但是不希望函数将其打印出来,而是返回该值,因为稍后需要在另一个函数中使用它。返回的问题是,它第一次返回时会脱离该函数,因此它不会完成转换过程,它不会简单地返回“ 1”并返回“ 5”而不是返回“ 101”。而已。有任何解决办法吗?我预先感谢。 这也是我的代码:

int two;
int base(int a)
{

    if(a==1)
    {
        two=a%2;
    }
    else
    {
        base(a/2);
        two=a%2;
    }
    return two;
}

注意:当然,如果我将返回类型更改为void并仅打印值,则代码可以很好地工作。但是我想返回值。

2 个答案:

答案 0 :(得分:1)

如果要使用递归,可以像这样返回std::string

std::string base(int a)
{
    if (a == 0)
        return "0";
    else if (a == 1)
        return "1";
    else
        return base(a / 2) + ((a % 2) ? "1" : "0");
}

使用std::to_chars中的std::from_chars<charconv>也可以。

答案 1 :(得分:1)

总结的实现(实际上它可以迭代实现,但是似乎您需要应用递归,所以我提供了递归解决方案):

int baseHelper(int a, int factor) 
{
    int returnedValue = 0;

    if(a==0 || a==1)     
       returnedValue = factor * a;

    else     
    {        
        int addend = factor * (a%2);
        returnedValue =  addend + baseHelper(a/2, factor*10);  
    }     

    return returnedValue;
}

int base(int a)
{
    return baseHelper(a, 1);
}

int main()
{
    for(int i=0; i<=256; i++)
        cout << "i=" << i << " " << base(i) << endl;

    return 0;
}