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-mai-jin-yu/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,卖金鱼题目与解析

1,题目:

小明将养的一缸金鱼分5次出售:
第1次卖出全部的一半加1/2条;
第2次卖出余下的三分之一加1/3条;
第3次卖出余下的四分之一加1/4条;
第4次卖出余下的五分之一加1/5条;
最后卖出余下的11条。
试编程求出原来鱼缸中共有多少条金鱼?

2,解析:

a,总结每次的卖出数量:
设第一次卖出前数量为x,则卖出数量为:
 x*1/2+1/2 化简后:(x+1)/2
设第二次卖出前数量为x,则卖出数量为:
 x*1/3+1/3化简后: (x+1)/3
以此类推,
设第n次卖出前数量为x,则卖出数量为:
(x+1)/(n+1)

b, 得到卖出前的数量:
第n次卖出后剩余数量:x-(x+1)/(n+1) = fish(n+1)
可以得到x的值:即第n次卖出前的数量:
x = (fish(n+1)*(n+1)+1)/n

三,编写代码

1,递归函数解决:

1
2
3
4
5
6
7
8
9
10
11
# 递归函数: 返回第几次卖鱼前的数量
# n: 第几次卖鱼
def fish(n):
    if n == 5# 第5次卖鱼前共有11条鱼,终止递归
        return 11
    else# 否则递归调用fish(n+1),返回第n次卖鱼前的数量
        return (fish(n + 1) * (n + 1) + 1) / n
 
 
fish1 = int(fish(1))
print(f"鱼缸中共有{fish1}条金鱼")

运行结果:

鱼缸中共有59条金鱼

2, for循环解决:

1
2
3
4
5
6
fish = 11  # 初始化fish的数量,第5次卖鱼前
for i in range(4, 0, -1):  # 循环,从第4次卖鱼前到第1次卖鱼前
    fish = (fish * (i + 1) + 1) / i
 
fish1 = int(fish)
print(f"鱼缸中共有{fish1}条金鱼")

运行结果:

鱼缸中共有59条金鱼
posted @ 2024-05-16 10:35  刘宏缔的架构森林  阅读(54)  评论(0编辑  收藏  举报