python: 递归函数:卖鸭子

一,认识递归函数

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

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

3,语法

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

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

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

二,题目与解析

一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只
这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?
解析:
经过第七个村子后还剩2只鸭子
经过第七个村子前还剩( 2 + 1) * 2
需要注意的,问题问的是出发时共赶了多少只鸭子?
不是经过第一个村子后的鸭子数量,
所以求数量时应该取经过第一个村子前的鸭子数量

三,代码:

1,用递归函数解决

1
2
3
4
5
6
7
8
9
10
11
# 递归函数
# n: 第几个村子
def duck(n):
    if n == 7# 经过第7个村子前
        return (2 + 1) * 2
    else:
        before = (duck(n + 1) + 1) * 2  # 经过第n个村子前
        return before
 
 
print("经过第1个村子前:", duck(1))

运行结果:

经过第1个村子前: 510

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

2,用for循环解决

1
2
3
4
5
6
7
8
9
remain = 2  # 经过第七个村子后剩余2只
 
villages = [7, 6, 5, 4, 3, 2, 1]     # 定义村子的列表
for i in villages:
    before = (remain + 1) * 2   # 经过第i个村子之前的数量
    print('经过第'+str(i)+'个村子前:', before)
    # 经过第i个村子之前的数量,
    # 即经过上一个村子之后的数量
    remain = before

运行结果:

经过第7个村子前: 6
经过第6个村子前: 14
经过第5个村子前: 30
经过第4个村子前: 62
经过第3个村子前: 126
经过第2个村子前: 254
经过第1个村子前: 510
posted @ 2024-05-15 10:10  刘宏缔的架构森林  阅读(91)  评论(0编辑  收藏  举报