3n+1问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。克拉兹问题(Collatz problem)也被叫做hailstone问题、3n+1问题、Hasse算法问题、Kakutani算法问题、Thwaites猜想或者Ulam问题。
问题如下:
(1)输入一个正整数n;
(2)如果n=1则结束;
(3)如果n是奇数,则n变为3n+1,否则n变为n/2;
(4)转入第(2)步。
克拉兹问题的特殊之处在于:尽管很容易将这个问题讲清楚,但直到今天仍不能保证这个问题的算法对所有可能的输入都有效——即至今没有人证明对所有的正整数该过程都终止。
【分析】:3n+1问题是一道经典的问题了,原名好像就什么“冰雹下落”,具体的问度娘吧~
注意不停的递归就好,其实没你想的那么难,还是一点要注意的,一定要注意递
归结束的条件,不然又会陷入死递归。。。
巧妙的利用一个deep变量来随时记录经过递归的次数,每经过一次递归,将会++
# include<cstdio> # include<iostream> using namespace std; int ans = 0; int f( int n,int deep ) { if ( n == 1 ) return deep; if ( n%2 == 0 ) return ( f(n/2,deep+1) ); else return ( f( 3*n+1,deep+1) ); } int main(void) { int t;cin>>t; for ( int i = 1;i <= t;i++ ) { int x;cin>>x; cout<<f(x,0)<<endl; } return 0; }