我正在使用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