角谷定理python_递归算法实现角谷定理

本文介绍了角谷定理,即输入一个自然数,通过偶数除以2,奇数乘以3加1的方式,最终都会得到自然数1。以22为例,展示了运算过程和步骤。通过递归算法实现该定理,定义Kakutani函数,根据数字奇偶性进行相应运算,并递归计数,直至数字为1,返回步数。在主函数中接收用户输入并调用Kakutani函数展示结果。
摘要由CSDN通过智能技术生成

问题重述:

角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

如:输入22,

输出22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

STEP=16

题目分析:

根据题意有:

xn+1=xn2,   xn%2=0xn+1=xn×3+1,   xn%2=1

最后Xlast=1

算法构造:

根据上述公式可以看出:

函数出口:Xlast=1

函数体:

xn+1=xn2,   xn%2=0xn+1=xn×3+1,   xn%2=1

根据当前的数字判断其奇偶性,若为偶数,则把它除以2,若为奇数,则把它乘以3加1,然后再次递归判断,直到最后一次的数字为1时跳出函数

算法实现:

#include

using namespace std;

/*

Author:Qiaoxue Zheng

Date:2018/11/15

Dscribtion:To get the steps according to Kakutani Theory

*/

/*

Function:Kakutani

Parameter:

number:natural number

Return:steps

*/

int Kakutani(int number) {

int count = 0;

cout << number<

count++;//count steps

//exit,the last number is 1

if (number == 1) {

return count;

}

//body

else {

if (number % 2 == 0) {//Even numbers

count += Kakutani(number / 2);

return count;

}

else {//Odd number

count += Kakutani(number * 3 + 1);

return count;

}

}

}

//Main function

int main() {

int number = 0;

cout << "please input a int number:";

cin >> number;

cout<

system("pause");

return 0;

}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值