拿到题目如何想呢? 看到一百万的项脑子就想到了偷懒,但是迭代规则告诉我们这个好像不能偷懒,那么就是一百万个数全部筛一边了,首先是确定迭代规则,然后就是想办法在迭代规则中记录迭代的次数了,一开始我想到的是在函数里定两个参数,一个形参一个实参,实参是length 记录迭代长度,后来看到大牛直接在return 里每次加1,一层层往外面+1 最后return 的就是长度了,
#include<iostream>
using namespace std;
int func(long long x) { //递归时间很久 考虑采用递推方法
if (x == 1) return 1; //递归边界
if (x % 2 == 0) return func(x / 2) + 1; //不停加1 累计共经过有多少项到达1
else return func(3 * x + 1) + 1;
}
int main() {
int ans = 1;
for (int i = 2; i < 1000000; i++) {
if (func(i) > func(ans)) ans = i;
}
cout << ans << endl;
return 0;
}