Python-函数

练习

猴子吃桃问题(递归):猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?

#第零种---递归
maxDay = 10
leftPeach = 1
def fun0(day = 1):
    if day == maxDay:
        peach = leftPeach
    elif day < maxDay:
        peach = (fun0(day + 1)+1)*2
    return peach
    
print(fun0())
    
    
#尾递归
#第一种---部分参数支持更改

result = 0 #猴子总共拥有的桃子数
time = 120 #猴子可以吃的天数
def fun1(date):# date     
    global result
    if date == time:#天数为临界点
        result = 1 #当天数为临界时,猴子拥有的桃子数
    else :#除了临界天数之外,每天猴子吃前一天的一半+1
        result = (result+1)*2 #反推前一天是 (后一天的桃子数+1) *2
    if(date >1): #因为为反推,想要推到至第一天,那么所输入的数字要大于一
        fun1(date - 1) #当天数大于一时,每次都执行输入date-1的天数
    return result
print(fun1(time))


#第二种---除猴子吃东西的计算方式不支持外部修改,其余所有参数均支持修改


result = 1 #以临界点时间数量为基础,方法内进行数值改变
time =10 #临界时间,可随意改变

def fun2(date):# 传入临界时间内的每一天 1-time
    global result
    if date < time:
    #如果在临界时间内,每天的桃子数,等于 (前一天+1) *2,临界天数除外
        result = (result+1)*2
    if(date >1): #方法只执行至第二天
        fun2(date - 1)
    return result
print(fun2(time))


#第三种---正向数据校验,参数不支持修改


date = 1 #时间从第一天开始
def fun3(num):
    global date
    global res
    if date == 10: #临界时间
        print(res)
    else :
        res = num/2 - 1 #非临界时间每天的桃子数计算
        date += 1 #天数自增
        fun3(res) #执行第二天的操作直至date达到临界点
print(fun3(1534)) #按照10天猴子吃完所计算出的结果传入,验证数值是否合理
 

#第四种---#正向数据校验,除猴子吃桃的计算方式不支持修改,其余参数均支持修改


date1 = 1 #时间开始
time1 = 10 #时间临界点
peachnum = 1 #临界桃子个数
res = result #总桃子数
def fun4(num):
    global date1
    global res
    if res > peachnum:#临界桃子数
        res = int(num/2 - 1) 
        date1 += 1
        fun4(res)
    return date1
print(fun4(res)) 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容