#include<iostream>
using namespace std;
//递归
int Kakutani(int number)
{
int step=0; //定义并初始化整型变量,运算步数
int s; //定义一个临时变量,用于存放中间过程的运算步数
cout<<number<<" ";
step++;
//递归出口,总会得到自然数值1
if(number==1)
{
return step; //返回运算步数
}
else
{
if(number%2==0) //若为偶数,则除以2
{
number/=2;
s=Kakutani(number);
step+=s;
return step; //返回运算步数
}
else
{
number=number*3+1;
s=Kakutani(number);
step+=s;
return step; //返回运算步数
}
}
}
//非递归
int non_Kakutani(int number)
{
int step=0; //定义并初始化整型变量,运算步数
while(number>0)
{
if(number==1)
{
step++;
cout<<number;
break;
}
else if(number%2==0)
{
step++;
cout<<number<<" ";
number=number/2;
}
else
{
step++;
cout<<number<<" ";
number=number*3+1;
}
}
cout<<endl<<"STEP="<<step<<endl;
return 0;
}
void main()
{
int num;
cout<<"请选择用哪种方法对角谷定理求解?(0::递归 1:非递归):";
cin>>num;
switch(num)
{
case 0:
int n;
cout<<"请输入一个自然数:";
cin>>n;
cout<<endl<<"STEP="<<Kakutani(n)<<endl;
break;
case 1:
cout<<"请输入一个自然数:";
cin>>n;
non_Kakutani(n);
}
}
角谷定理
最新推荐文章于 2023-12-09 21:52:59 发布