C ++递归示例说明

时间:2014-11-23 16:13:04

标签: c++ recursion

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

1 个答案:

答案 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来想象发生了什么。