2017-06-25 90 views
0
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位数字是怎么出现的,有人可以给我解释一下吗?递归打印C++

+2

'n/100'试图解释这是做什么。也解释你为什么需要'cout << n%10;'两次。 –

+0

它以n/100作为参数调用函数f。 – poptartbr1

+0

没有最后一个cout << n%10;该程序将只打印出5310,我想知道为什么它使用第二个cout打印出5310135。 – poptartbr1

回答

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

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