递归返回意外输出

时间:2015-03-04 02:48:47

标签: c++ recursion

我从test(2,8)开始

我认为输出应该是4 7 相反,我得到6 6 4 7 因为p1 = p2,即6 = 6,所以不应该执行cout语句。 为什么我会看到6 6?

 using namespace std;

 void test(int p1, int p2);

  void  main()
  {
     test(2, 8);
     return ;
   }


  void  test(int p1, int p2)
  {
   if (p1 != p2)
   {
    p1 = p1 + 2;
    p2 = p2 - 1;
    test(p1, p2);
    cout << p1;
    cout << p2;
   }
  }

1 个答案:

答案 0 :(得分:3)

第一次测试 p1 变为4, p2 变为7.但在打印之前我们再次进行递归,这次 p1 变为6, p2 也变为6.我们再次调用递归,但是当 p1 p2 相同时,它返回而不打印任何内容(如果条件不输入) )。然后它打印6 6并且当它返回到最高级别调用测试功能时它打印4 7.因此输出是6 6 4 7.