나는 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을 꽂으면, 그 결과로 10 진수를 얻을 것으로 예상됩니다. 하지만 나는 .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"은 지역 변수이고 모든 호출에서 항상 0으로 초기화된다는 것을 알고 있습니까? – Jdamian
@ Jdamian 발신자에게 번호를 반환 할 방법이 없기 때문에 그녀는 출력하기 위해 작성하는 것 같습니다. – IllusiveBrian
귀하의 예에서 2^(- 1) 값, 즉 0.5가 반환되는 이유를 알고 있습니까? – Jdamian