什么是递归函数?
在函数内部,可以调用其他函数。
如果一个函数在内部调用自身本身,这个函数就是递归函数。
任务一:小孩的报酬*
任务内容:
一个小孩子给一个富翁做事,商量的报酬是第一天2角,第二天是第一天的2倍,依此类推,请问第20天后,这个小孩子能拿到多少钱?
1f
程序编写要求:
➢使用递归函数完成
➢结果输出如下图所示:
代码:
#第二天的报酬是第一天的二倍加上0.2元
def ff(n):
if n !=1:
return ff(n - 1) * 2 + 0.2
else:
return 0.2
# if n == 1:
# return 0.2 # 递归停止
# return ff(n - 1) * 2+0.2
def f(n):
for i in range(1,n+1):
print("第%d天的报酬为:%.1f"%(i,ff(i)))
f(20)
运行结果:
第1天的报酬为:0.2
第2天的报酬为:0.6
第3天的报酬为:1.4
第4天的报酬为:3.0
第5天的报酬为:6.2
第6天的报酬为:12.6
第7天的报酬为:25.4
第8天的报酬为:51.0
第9天的报酬为:102.2
第10天的报酬为:204.6
第11天的报酬为:409.4
第12天的报酬为:819.0
第13天的报酬为:1638.2
第14天的报酬为:3276.6
第15天的报酬为:6553.4
第16天的报酬为:13107.0
第17天的报酬为:26214.2
第18天的报酬为:52428.6
第19天的报酬为:104857.4
第20天的报酬为:209715.0
代码:
#第二天的报酬是第二天的二倍
def ff(n):
if n !=1:
return ff(n - 1) * 2
else:
return 0.2
# if n == 1:
# return 0.2 # 递归停止
# return ff(n - 1) * 2+0.2
def f(n):
for i in range(1,n+1):
print("第%d天的报酬为:%.1f"%(i,ff(i)))
f(20)
运行结果:
第1天的报酬为:0.2
第2天的报酬为:0.4
第3天的报酬为:0.8
第4天的报酬为:1.6
第5天的报酬为:3.2
第6天的报酬为:6.4
第7天的报酬为:12.8
第8天的报酬为:25.6
第9天的报酬为:51.2
第10天的报酬为:102.4
第11天的报酬为:204.8
第12天的报酬为:409.6
第13天的报酬为:819.2
第14天的报酬为:1638.4
第15天的报酬为:3276.8
第16天的报酬为:6553.6
第17天的报酬为:13107.2
第18天的报酬为:26214.4
第19天的报酬为:52428.8
第20天的报酬为:104857.6
任务二:猴子偷桃(递归改写)
任务内容:
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个。到第10天早上再想吃时,就剩下一个桃子了。 求第一天共摘多少个桃子?
程序编写要求:
➢使用递归函数完成
➢输出结果核对:第一天的桃子数是1534个
代码:
#第九天的桃=(第十天的桃+1)*2
#......
#第一天的桃=(第二天的桃+1)*2
def ff(day,peach):
print("第%d天有%d个桃"%(day,peach))
peach = (peach+1) * 2
if day == 1:
return peach
return ff(day-1,peach)
ff(10,1)
运行结果:
第10天有1个桃
第9天有4个桃
第8天有10个桃
第7天有22个桃
第6天有46个桃
第5天有94个桃
第4天有190个桃
第3天有382个桃
第2天有766个桃
第1天有1534个桃
任务三:斐波纳契数列之谜(递归改写)
任务内容:
前两个数都为1,从第三个数起每一个数为前两个数之和。要求输出此数列的前20个数
程序编写要求:
➢使用递归函数完成
代码:
def ff(n):
if n == 1:
return 1
elif n == 2:
return 1
else:
return ff(n - 1) + ff(n - 2)
def main(n):
for i in range(1, n+1):
print("第%d个数为:%d"%(i,ff(i)))
main(20)
运行结果:
第1个数为:1
第2个数为:1
第3个数为:2
第4个数为:3
第5个数为:5
第6个数为:8
第7个数为:13
第8个数为:21
第9个数为:34
第10个数为:55
第11个数为:89
第12个数为:144
第13个数为:233
第14个数为:377
第15个数为:610
第16个数为:987
第17个数为:1597
第18个数为:2584
第19个数为:4181
第20个数为:6765
任务四:求长方形的面积
任务内容:
要求从键盘输入长方形的长和宽,要求输出该长方形的面积。
程序编写要求:
➢使用匿名函数完成
➢输出如下所示:
代码:
area=lambda length,wide:length*wide
a=float(input("请输入长方形的长:"))
b=float(input("请输入长方形的宽:"))
print("长方形的面积是:",area(a,b))
运行结果:
请输入长方形的长:12.4
请输入长方形的宽:2.8
长方形的面积是: 34.72
请输入长方形的长:5
请输入长方形的宽:7
长方形的面积是: 35.0
任务五:使用递归函数实现阶乘
代码:
def ff(n):
if n == 1:
return 1 #递归停止
return n * ff(n - 1)
print(ff(5)) # 输出结果: 120
print(ff(10)) # 输出结果: 3628800
任务六:使用递归函数,计算1到100之间相加之和
代码:
def sum(n):
if n > 0:
return n + sum(n - 1)
else:
return 0 #==0时递归停止
print(sum(100)) #结果为:5050