【发布时间】:2015-04-23 13:26:05
【问题描述】:
我无法理解这个简单的递归函数是如何工作的:
void printBinary(const int& n)
{
if(n < 2)
{
cout << n;
}
else
{
printBinary(n / 2);
printBinary(n % 2);
}
}
我知道这与 n / 2 “砍掉”二进制表示的最后一位数字和 n % 2 产生二进制表示的最后一位数字有关,但是当我递归跟踪这段代码时,它看起来就像魔术.我想不出一个简单的合乎逻辑的解释。
编辑: This 是对该算法的一个很好的解释,并让我将我的问题重新表述为:为什么 n % 2 或十进制数的余数会为您提供此类数字的二进制数字。这背后的逻辑是什么?
【问题讨论】:
-
你明白为什么
n % 10给你最后一个以10为底的数字吗?那么n % 2在base 2中是一样的。 -
好的,所以它适用于所有基础......我想这只是你必须把它当作事实而不问为什么余数是二进制表示中的数字?
-
这是因为数字是
a0 + 2*a1 + 4*a2 + 8*a3 + ...其中 a0,a1,... 是从右到左的二进制数字。如果您将商和余数除以 2,您将分别得到a1 + 2*a2 + 4*a3 + ...和a0。 -
有道理,伙计。它基本上是由于系统的定义,每个位置如何是 2 的幂。我希望我可以将此标记为答案...谢谢!
标签: c++ algorithm recursion binary