二进制到十进制递归 - 没有全局变量

时间:2014-03-18 12:36:33

标签: c++ recursion

我正在学习C ++中的递归,并且我正在尝试使用递归函数将二进制转换为十进制转换器。在下面的代码中,转换器正常工作:

#include <iostream>
#include <cmath>
#include <bitset>
using namespace std;

int sum = 0;

int DecimalConversion (int power, int number){      
    int bit;

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

    bit = number % 10;
    sum = sum + bit * pow(2, power);
    number /= 10;
    power++;

    DecimalConversion(power, number);
    return sum;

    //return bit * pow(2, power) + DecimalConversion(power, number);
}

int main(){
    int power = 0;
    int number = 0;

    cout <<  "Enter binary number: " << endl;
    cin >> number;
    cout << "Number is: " << DecimalConversion(power, number);

    system("PAUSE >> NULL");
    return 0;
}

是否可以通过不使用全局变量从DecimalCoonversion函数返回值?有人可以解释一下,我尝试了下一行代码,但它无法正常工作:

return bit * pow(2, power) + DecimalConversion(power, number);

任何人都可以使用上一行代码解释我在哪里犯错吗? 提前谢谢

2 个答案:

答案 0 :(得分:1)

这会将sum作为参数添加到您的函数中,但如果您没有明确提供它,则默认为0。权力也默认为0,这样您就不必将其传递给函数。

由于默认参数必须位于函数声明和/或定义参数列表的末尾,因此我必须移动power来实现此目的。

#include <iostream>
#include <cmath>
#include <bitset>
using namespace std;

int DecimalConversion (int number, int power = 0, int sum = 0) // changes here
{  
    if (number == 0)
    {
        return sum;
    }

    int bit = number % 10;
    sum = sum + bit * pow(2, power);
    number /= 10;
    power++;

    return DecimalConversion(number, power, sum); // changes here
}

int main(){
    int number = 0;

    cout <<  "Enter binary number: " << endl;
    cin >> number;
    cout << "Number is: " << DecimalConversion(number);

    system("PAUSE >> NULL");
    return 0;
}

请注意我没有检查这实际上是否正确地将二进制转换为十进制,只是递归有效。

您可以像这样调用此函数:

DecimalConversion(number);

答案 1 :(得分:0)

此:

int DecimalConversion(int power, int number){
    if (number == 0)
        return 0;
    else
        return (number % 10)*pow(2, power) + dc(power+1, number/10);
}

int DecimalConversion(int power, int number){
    return number?(number % 10)*pow(2, power) + dc(power+1, number/10):0;
}