我有以下代码示例,我无法弄清楚为什么它显示123.由于这些是整数,我理解不显示小数.但我预期它显示3,2(0.3),1(0.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;
}
Run Code Online (Sandbox Code Playgroud)
好吧,你用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)
...
Run Code Online (Sandbox Code Playgroud)
它将继续像这样,递归地调用n12
recursion (n/10) // second recursion call n=12, so n/10 = 1
Run Code Online (Sandbox Code Playgroud)
然后执行该函数,n为1,小于10
if (n < 10) // its true
cout << n; // 1 gets printed
else // no, the rest is skiped
...
Run Code Online (Sandbox Code Playgroud)
然后它从递归返回.所以我们回到n12 的上下文中.在该上下文中要执行的下一个语句是:
cout << n %10; // prints 12 % 10, which is 2
Run Code Online (Sandbox Code Playgroud)
然后,像这样继续,类似地它将打印123%10,即3.总之,打印的123与输入的123无关.
我想你想做:
...
else {
cout << n % 10; // first print to see the count down
recursion(n / 10); // then recurse
}
Run Code Online (Sandbox Code Playgroud)
但是你必须学习使用调试器.只要你不这样做,就加一些额外的东西cout来想象发生了什么.