【发布时间】:2012-03-17 09:18:12
【问题描述】:
我需要一些关于以下代码的解释:
用于将十进制数转换为二进制数的代码: 它来自一个教程,但它让我感到困惑。
void binary(int);
void main(void) {
int number;
cout << "Please enter a positive integer: ";
cin >> number;
if (number < 0)
cout << "That is not a positive integer.\n";
else {
cout << number << " converted to binary is: ";
binary(number);
cout << endl;
//cin.get();
}
}
void binary(int number) {
int remainder;
if(number <= 1) {
cout << number;
return;
}
remainder = number%2;
binary(number >> 1);
cout << remainder;
//cin.get();
}
我使用断点观察数据通过程序,但最后我无法跟踪它。
我看到了什么:
它需要一个数字,如果数字
但在此之前,它首先计算该数字的模数并将其放入余数中。 然后它向 number 的右边移动一点或者做同样的事情,直到 number 小于或等于 1。
但随后它会多次保持“cout 余数”(取决于计算出多少 0/1) 但这怎么可能? 余数是缓冲区吗? (我认为它一直被覆盖(因为它是 int),但看起来一直在添加位然后打印几次)???
谁能给我慢慢解释一下?
【问题讨论】:
-
这个问题真的是关于递归的。一旦你理解了递归的概念,代码就会变得有意义。
标签: c++ if-statement modulo