我有此代码输出: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;
}
答案 0 :(得分:0)
在递归结束时,函数输出1
,然后堆栈弹出所有内容,而main
显示返回值1
(递归结束时返回0并且仅对H(5)的调用将结果加1),因此将打印11
。