C++ 故障跟踪递归函数

C++ 故障跟踪递归函数,c++,algorithm,recursion,C++,Algorithm,Recursion,我有一个输出代码:1051684211 然而,我不知道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值输出不应该是:105 17 8 4 2 1吗 #include <iostream> using

我有一个输出代码:1051684211 然而,我不知道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值输出不应该是:105 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;
}
#包括
使用名称空间std;
整数H(整数n){

cout在递归结束时,函数打印
1
,然后堆栈弹出所有内容,
main
打印返回值
1
(在递归结束时返回0,只有对H(5)的调用将一个值添加到结果中),因此,
11
被打印出来。

@tadman完成了我的任务。你应该能够通过使用调试器单步执行程序并密切注意意外情况来解决这个问题。注意:这不是一个11,而是两个之间没有空格的。请尝试
cout,但最后一个“1”来自
cout
H(10)=H(5)=1+H(16)=1+H(8)=1+H(4)=1+H(2)=1+H(1)=1+0=1
所以它在原始值上加了1?还是因为我在加了一个space@Matcha_boy98你是什么意思?
H(10)=H(5)=1+H(16)=1+H(8)=1+H(4)=1+H(2)=1+H(1)=1+0=1
然后打印
105168844211
。@Matcha_boy98为每行
cout
添加一个不同的前缀(最好放在单独的行上),它会变得更清晰。我该怎么做,你是说用前缀缩进行吗?@Matcha_boy98将Martin的建议作为练习!如何生成你在问题中建议的输出?