我创建了两个函数,它们接受一个十进制数字并返回该数字的二进制表示形式。我选择了一种简单的方法,通过一些简单的数学运算,将1和0串联到一个字符串上。我创建了一个迭代和递归的方法来做到这一点。然后我用老师给我的计时器课给这两种方法计时。事实证明,我的递归方法比迭代方法快大约两倍。为什么会这样呢?
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';
}
}
}
将字符附加到astd::string
之前比先添加一个便宜,因为如果字符串的容量允许,则可以在不复制字符串的情况下进行附加。
但是,前置总是需要整个字符串的副本。
如果您将迭代代码更改为此
string ss;
while(num > 0)
{
if (num%2 != 0)
{
ss = ss + '1';
}
else
{
ss = ss + '0';
}
num=num/2;
}
return string(ss.rbegin(), ss.rend());
时间应该几乎相同,否则迭代应该变得更快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句