#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<ll>vec;
void ice_guess(ll n)
{
vec.push_back(n);
if(n==1) return;
if(n%2==0) ice_guess(n/2);
if(n%2==1) ice_guess(n*3+1);
}
int main()
{
int n;
cin>>n;
ice_guess(n);
for(int i = vec.size()-1;i>=0;i--)
{
cout<<vec[i]<<" ";
}
return 0;
}
通过题目,我们可以发现其实这就是一个递归题目,从最大数开始递归,直到通过奇数计算、偶数计算最后得到数字1。
那么自然而然通过条件写出递归函数,然后在int main中引用函数。
但我们可以注意,虽然递归返回的值符合题意,但是倒序的(从输入的值开始,而不是从1开始),所以我们可以用vec的反转函数
【
reverse(vec.begin(),vec.end());
for(auto i:vec)
{
cout<<i<<" ";
}
】,
也可以直接for循环倒序打印输出。