首页 > 编程语言 >python算法:角谷猜想

python算法:角谷猜想

时间:2024-05-15 10:19:14浏览次数:25  
标签:角谷 递归函数 python 自然数 times int 算法 num print

一,认识递归函数

1,什么是递归?
递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,
否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,
直到问题无法分解为止

2,什么是递归函数:
递归函数(recursive function)是指在函数体中可以调用自己的函数

3,语法

def fn():
    # ...
    if condition:
        # 停止自我调用
    else:
        fn()
    # ...

4,递归函数的优点和缺点

递归函数的优点:它们可以帮助程序员在处理复杂问题时提供一种简单且易懂的解决方案。
递归函数使代码具有可读性和可重用性,
而且可以使用递归函数解决使用其他方法难以处理的问题。
递归函数的缺点: 递归函数可能会在运行时占用较多的系统资源,
因为它们需要在堆栈上存储多个函数调用
其次,递归函数可能导致代码变得不容易理解,
因为它具有一定的复杂度

二,角谷猜想(又名冰雹猜想)

1,角谷猜想的问题:

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

2,解析:

数字为1时结束循环,
否则一直重复进行除2或乘3加1的运算,
这是很典型的递归函数的特点

三,代码实现

1,使用递归函数

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 times = 0 # 递归函数 # num: 要进行计算的数字 def hail(num):     global times     if num == 1:     # 得到1时结束         return     else:         orig = int(num)         if num % 2 == 0:             times += 1             num /= 2             print(f'{orig}/2={int(num)}')         else:             times += 1             num = num * 3 + 1             print(f'{orig}x3+1={int(num)}')         hail(num)   # digit: 输入的自然数 digit = int(input('请输入一个自然数:')) hail(digit) print("次数",times)

运行结果:

请输入一个自然数:22
22/2=11
11x3+1=34
34/2=17
17x3+1=52
52/2=26
26/2=13
13x3+1=40
40/2=20
20/2=10
10/2=5
5x3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
次数 15

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/11/python-suan-fa-jiao-gu-cai-xiang/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]

2,使用while循环

1 2 3 4 5 6 7 8 9 10 11 12 s = int(input('请输入一个自然数:'))    # 要转换为1的数字 times = 0     # 运算的次数 while (s != 1):     orig = s     # 保存下未运算前的原始数字,打印用     if s % 2 == 0:     # 偶数时         s = int(s / 2)         print(f'{orig}/2={s}')     elif s % 2 != 0:     # 奇数时         s = int(s * 3 + 1)         print(f'{orig}x3+1={s}')     times = times + 1 print(f'经过{times}次运算得到自然数1')

运行结果:

请输入一个自然数:22
22/2=11
11x3+1=34
34/2=17
17x3+1=52
52/2=26
26/2=13
13x3+1=40
40/2=20
20/2=10
10/2=5
5x3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
经过15次运算得到自然数1
 

标签:角谷,递归函数,python,自然数,times,int,算法,num,print
From: https://www.cnblogs.com/architectforest/p/18193286

相关文章

  • python算法:水仙花数
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • python: 递归函数:阶乘
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......
  • 视觉定位引导算法相关总结
    1#region===========================两个相机=============================================2publicstaticdouble[]TwoPointLine(doublePoint1X,doublePoint1Y,doublePoint2X,doublePoint2Y)3{4double[]TwoPointPars=newdouble[3];......
  • python: 递归函数:汉诺塔
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......
  • python: 递归函数:猴子吃桃
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......
  • python: 递归函数:斐波那契数列
    一,认识递归函数1,什么是递归?递归的工作原理是,如果函数需要处理的问题大小合适,则直接求解并返回结果,否则将问题分解成两个或多个更小的子问题,并对子问题进行相同的处理,直到问题无法分解为止2,什么是递归函数:递归函数(recursivefunction)是指在函数体中可以调用自己的函数3,语......
  • 地理数据可视化的神奇组合:Python和Geopandas
    本文分享自华为云社区《Python与Geopandas:地理数据可视化与分析指南》,作者:柠檬味拥抱。地理数据可视化在许多领域都是至关重要的,无论是研究地理空间分布、城市规划、环境保护还是商业决策。Python语言以其强大的数据处理和可视化库而闻名,而Geopandas作为其地理信息系统(GIS)领域的......
  • python 类型转换函数
    float()将一个字符串或数字转换为浮点数。number=float("123.45")print(number)#输出:123.45int()将一个字符串或数字转换为整数。number=int("123")print(number)#输出:123binary_number=int("101",2)print(binary_number)#输出:5bin()将一个整数......
  • PYTHON、R对小说文本挖掘正则表达式分析案例
    原文链接:http://tecdat.cn/?p=5673原文出处:拓端数据部落公众号 《第二十二条军规》是美国作家约瑟夫·海勒创作的长篇小说,该小说以第二次世界大战为背景,通过对驻扎在地中海一个名叫皮亚诺扎岛(此岛为作者所虚构)上的美国空军飞行大队所发生的一系列事件的描写,揭示了一个非理性的......
  • 代码随想录算法训练营第第七天 | 454.四数相加II 、383. 赎金信 、15. 三数之和 、18
    454.四数相加II建议:本题是使用map巧妙解决的问题,好好体会一下哈希法如何提高程序执行效率,降低时间复杂度,当然使用哈希法会提高空间复杂度,但一般来说我们都是舍空间换时间,工业开发也是这样。题目链接/文章讲解/视频讲解:https://programmercarl.com/0454.四数相加II.html......