我有以下代码示例,我无法弄清楚为什么它会显示 123 。 由于这些是整数,我理解不显示小数。但我预计它会显示 3 , 2 (。3), 1 (。23)(按相反的顺序)。当 n 低于10时,一切都会在最后一次cout后停止......对吗?
#include <iostream>
using namespace std;
void recursion(int n) {
if (n < 10) cout << n;
else {
recursion(n / 10);
cout << n % 10;
}
}
int main() {
recursion(123);
return 0;
}
答案 0 :(得分:5)
好吧,你用123调用n
,函数执行语句:
if (n < 10) // its false, so it continues with else:
else {
recursion ( n /10 ) // recursive call n/10 = 123/10 = 12 (as it's int)
...
它将继续这样,递归调用n
为12
recursion (n/10) // second recursion call n=12, so n/10 = 1
然后执行该函数,其中n为1,小于10
if (n < 10) // its true
cout << n; // 1 gets printed
else // no, the rest is skiped
...
然后它从递归返回。所以我们回到n
为12的上下文中。在该上下文中要执行的下一个语句是:
cout << n %10; // prints 12 % 10, which is 2
然后,像这样继续,类似地它将打印123%10,即3。总之,打印的123与输入的123无关。
我想你想做:
...
else {
cout << n % 10; // first print to see the count down
recursion(n / 10); // then recurse
}
但是你必须学习使用调试器。只要你不这样做,就加一些额外的cout
来想象发生了什么。