这是一道简单的递推或者递归问题
递推写法:
#include<iostream>
using namespace std;
int Callatz(int num)
{
int counter = 0;
if(num==1)
return 0;
do
{
if(num%2 == 0)
{
num/=2;counter++;
}
else
{
num=(num*3+1)/2;
counter++;
}
}while(num>1);
return counter;
}
int main()
{
int num;
cin>>num;
cout<<Callatz(num);
return 0;
}
第一次开头没有判断num为1的情况 所以没有通过
下边是递归的写法:
#include<iostream>
using namespace std;
int counter=0;
void Callatz(int num);
int main()
{
int num;
cin>>num;
Callatz(num);
cout<<counter;
return 0;
}
void Callatz(int num)
{
if(num==1)
{
return;
}
else if(num%2==0)
{
counter++;//只能在这里进行计数器累加;
Callatz(num/2);//对num进行num/2处理
}
else
{
Callatz(3*num+1); //可以视为对num进行3n+1处理;
}
}
递推比较好理解而且耗时较短;
重要的是对中间递归入口的处理!