#第零种---递归
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))