python算法:读书

一,认识递归函数

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

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

3,语法

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

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

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

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/24/python-suan-fa-du-shu/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,读书题目与解析

1,题目:

小明读书, 第一天读了全书的一半加二页,
第二天读了剩下的一半加二页,以此类推,
第六天读完了最后的三页,
问全书有多少页?

2,解析:

每天都会读全书未读页数的1/2再加2
设每天未读的页数为f(x)
 f(x)-f(x)*1/2-2 = f(x+1)
 根据上述等式可以得到:
 f(x) = (f(x+1)+2)*2
这样可以根据后一天的未读页数得到前一天的未读页数
又已知第6天的未读页数是3页,
可以用递归算法,
也可以用循环向前得到每一天的未读数

三,编写代码:

1, 递归算法

1
2
3
4
5
6
7
8
9
10
11
12
13
# 递归函数,得到某天未读的页数
# n: 第几天
# 返回:第几天时未读的页数
def num(n):
    if n > 6:      # 大于6时,返回0,递归终止
        return 0
    elif n == 6:      # 等于6时,返回3,递归终止
        return 3
    else:     # 其他天数时,按分析得到的方程式返回
        return (num(n + 1) + 2) * 2
 
 
print(f"全书共:{num(1)}页")

运行结果:

全书共:220页

2,循环

1
2
3
4
5
6
unread = 3  # 初始化未读的页数,第6天阅读前
for i in range(5, 0, -1):  # 循环,从第5天阅读前到第1天阅读前
    unread = (unread + 2) * 2
 
unread1 = int(unread)
print(f"全书共:{unread1}页")

运行结果:

全书共:220页
posted @ 2024-05-16 10:39  刘宏缔的架构森林  阅读(17)  评论(0编辑  收藏  举报