故障跟踪递归功能

时间:2019-10-30 17:40:14

标签: c++ algorithm recursion

我有此代码输出:10 5 16 8 4 2 11 但是,我不知道11的来源,因为跟踪时我得到以下信息:

H(10)
 H(5)
  1+H(16) //does this result in 17?
    H(8)
      H(4)
        H(2)
         H(1) -> returns 0

此外,1 + H(16)中的(1)会发生什么? 因此,我的n值输出不应为:10 5 17 8 4 2 1

#include <iostream>
using namespace std;

int H ( int n ) {
  cout << " " << n<<" ";
  if ( n == 1 ) return 0;
  if ( n%2 != 0 ) return 1 + H ( 3*n + 1 );
  else return H ( n/2 );
} 

int main() {
//   for ( int i=0; ++i<=20; )
//     cout << H(i) << endl;
cout << H(10) << endl;
}

1 个答案:

答案 0 :(得分:0)

在递归结束时,函数输出1,然后堆栈弹出所有内容,而main显示返回值1(递归结束时返回0并且仅对H(5)的调用将结果加1),因此将打印11