10 進数を受け取り、その数値の 2 進数表現を返す 2 つの関数を作成しました。簡単な計算の後で、1 と 0 を文字列に連結するという簡単な方法を選択しました。これを行うための反復的かつ再帰的な方法を作成しました。次に、先生がくれたタイマー クラスで 2 つの方法の時間を計りました。私の再帰的方法は、反復的方法と比較して約 2 倍高速であることが判明しました。なぜこれが当てはまるのでしょうか?
string CConversion::decimalToBinaryIterative(int num)
{
string ss;
while(num > 0)
{
if (num%2 != 0)
{
ss = '1' + ss;
}
else
{
ss = '0' + ss;
}
num=num/2;
}
return ss;
}
string CConversion::decimalToBinaryRecursive(int num)
{
if(num <= 0)
{
return "";
}
else
{
if (num%2 != 0)
{
return decimalToBinaryRecursive(num/2) + '1';
}
else
{
return decimalToBinaryRecursive(num/2) + '0';
}
}
}