我正在使用C++编写一个程序,该程序使用递归将用户输入二进制数转换为小数。我打这个代码小时递归二进制到十进制
(前面我i = binary.length();
初始化i
)
void bin2dec(string binary, int i)
{
double decNum=0;
if (i >= 0)
{
if (binary[i] = 0)
{
decNum = (decNum + 0);
}
else
{
decNum = (decNum + pow(2, (i-1)));
}
bin2dec(binary, i-1);
}
cout << decNum;
}
这是我的递归函数。不幸的是,我被卡住了。该程序运行,但给我不正确的值。例如,当我插入1作为二进制文件时,我期望得到1位小数。但我得到.5号码。我的计算是错误的还是我错误地使用了递归?
在收到建议后,我做了以下更改。但是,程序仍会返回不正确的值。
void bin2dec(string binary, int i)
{
double decNum=0;
if (i >= 0)
{
if (binary[i] == 1)
{
decNum = (decNum + pow(2, i));
}
else if (binary[i] == 0)
{
decNum = (decNum + 0);
}
bin2dec(binary, i - 1);
cout << decNum;
}
}
我从来没有想过在BIN2DEC转换使用递归!你是否意识到“decNum”是一个局部变量,并且在每次调用中总是初始化为零? – Jdamian 2014-11-02 16:31:03
@Jdamian看起来她只是写它输出,因为它没有任何方法可以将数字返回给调用者。 – IllusiveBrian 2014-11-02 16:36:02
你知道为什么,在你的例子中,值2 ^( - 1),即0.5返回? – Jdamian 2014-11-02 16:36:37