递归打印c ++

时间:2017-06-25 08:38:16

标签: c++

int main()
{
    f(12345);
    return 0;
}

void f(long n)
{
    cout << n%10;
    if(n!=0)
    {
        f(n/100); cout <<n%10;
    }
}

我无法弄清楚为什么调用f(12345)打印出“5310135”,我刚开始学习递归,我无法理解它是如何打印的。我编译并运行了程序,所以我知道它打印的价值。我被困在5310然后我不知道最后3位数是怎么出现的,有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:1)

第二个cout将在递归展开时执行,即从最后一次递归调用到第一次递归调用。

  f(12345)          
     print 5
     f(123) ----------> f(123)
     print 5                print 3
                            f(1)  -------->  f(1)
                            print 3             print 1
                                                f(0)  ----->   f(0)
                                                print 1           print 0

答案 1 :(得分:1)

答案在于if条件。在&#39; if&#39;,f(n / 100)被调用,它创建一个单独的执行树。这个单独的执行树在完成时立即调用下一条指令,在这种情况下分别为1,3和5。 enter image description here