我正在学习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);
任何人都可以使用上一行代码解释我在哪里犯错吗? 提前谢谢
答案 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;
}