C++递归示例说明

Tho*_*mas 1 c++ recursion

我有以下代码示例,我无法弄清楚为什么它显示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)

Chr*_*phe 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) 
...
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来想象发生了什么.