吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1856|回复: 5
收起左侧

[Python 转载] 【Python】-初学笔记-函数递归-求猴子吃桃问题

  [复制链接]
surepj 发表于 2021-12-23 18:44
题目:
猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第2天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半,另加一个。
到第7天早上想再吃时,就只剩下一个桃子了。
求第1天共摘了多少个桃子?

每天吃前一天的一半,另加1个,根据已知第7天只有1个桃子。
推出:
第7天有桃子=1,即f(7)=1,也就是第6天吃完当天的一半,再吃1个后剩下的。
第6天有桃子÷2-1=1,则第6天有桃子:(第7天的)1+1*2=4,即f(6)=(f(7)+1)*2
第5天有桃子÷2-1=4,则第5天有桃子:(第6天的)4+1*2=10,即f(5)=(f(6)+1)*2
第4天有桃子÷2-1=10,则第4天有桃子:(第5天的)10+1*2=22,即f(4)=(f(5)+1)*2
第3天有桃子÷2-1=22,则第3天有桃子:(第4天的)22+1*2=46,即f(3)=(f(4)+1)*2
第2天有桃子÷2-1=46,则第2天有桃子:(第3天的)46+1*2=94,即f(2)=(f(3)+1)*2
第1天有桃子÷2-1=94,则第1天有桃子:(第2天的)94+1*2=190,即f(1)=(f(2)+1)*2

找到规律为:第n天有桃子f(n) = ( f(n+1) + 1 ) * 2
代码:
[Python] 纯文本查看 复制代码
def f(n):
    if n == 7:
        return 1  # 第7天时,只有1个桃子,返回1
    return ( f(n+1) + 1 ) * 2

print("第1天桃子的数量:",f(1))



函数递归很强大的样子啊,最难的就是找到规律,找到等式。还要多学习啊

再来个用递归求阶乘的:
[Python] 纯文本查看 复制代码
# 递归求阶乘:step 1:明确函数要做什么,及调用函数
def func(n):
    # step 2:寻找递归结束的条件
    if n == 1 or n == 2:
        return n

    # step 3:编写递归等式(找规律)
    return n * func(n-1)

print('递归求阶乘得数:',func(10))

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
blindcat + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

mengzehe 发表于 2021-12-23 20:52
谢谢分享
yzqhj 发表于 2021-12-23 20:54
chi=float(input("请输入每天吃了剩下的几分之几:"))
duo=int(input("请输入每天多吃了几个:"))
n=int(input("请输入吃了几天:"))
sx=int(input("请输入还剩下几个:"))
print(n)
print(type(n))
zg=0
def jc(n):
    global sx,duo,chi,zg
    sx=(sx+duo)/chi
    n=n-1
    if n==1:
        zg=sx
        # print(sx)
        # print(n)
        print("结束!!!")
        print(zg)
        return zg
    else:
        print(sx)
        # print(n)
        jc(n)

if n==1:
    print("总共"+str(sx)+"个")
else:
    bc=jc(n)
    print(bc)
    print("总共"+str(bc)+"个")

老铁们,为什么大于3天,就无法正常返回值,1、2天都正常,超过3天也都能计算出来,但是就是return返回时为None
ZHANchenggu 发表于 2021-12-23 21:01
luhongwei123 发表于 2021-12-23 21:27
老铁太秀了,点个赞
 楼主| surepj 发表于 2021-12-24 07:44
yzqhj 发表于 2021-12-23 20:54
chi=float(input("请输入每天吃了剩下的几分之几:"))
duo=int(input("请输入每天多吃了几个:"))
n=int( ...

你这个我也没太看明白,按照你的意思,我写个,你看看
[Python] 纯文本查看 复制代码
days = int(input("请输入吃到了第几天:"))
half = int(input("请输入每天吃【几】分之一:"))
add = int(input("请输入每天多吃几个:"))
rest = int(input("请输入最后还剩多少个:"))
total = rest
for i in range(days-1,0,-1):
    total = (total + add) * half
print(f'每天吃前一天的{half}分之一,再加多吃{add}个。吃到了第{days}天,只剩下{rest}个。则:\n第一天有:{total}个桃子')
zm55555 发表于 2021-12-24 08:41
好玩,谢谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表