1.出售金鱼问题第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼。问这鱼缸里原有多少条金鱼?
题目分析:
得知最后还剩11条金鱼,用递归法以此类推出第四次、第三次、第二次、第一次出售前金鱼的数量。
得到递归函数:result=(Fish(i+1)+(Fish(i+1)+1)/i)。
代码
def fish(n): #第几次卖鱼时共有多少条鱼
if n == 5:
return 11
else:
return ((n+1)/n)*(fish(n+1)+1/(n+1))
# return (fish(n+1)*(n+1)+1)/n #化简后的表达式
n = eval(input())
print(fish(n))
运行结果
2.某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发车时车上的乘客有多少?
题目分析
递归出口:终点站有六名乘客
递归体:num(i)=(num(i+1)-8+i)*2 //计算到第i站车上的人数
那么到达第2站时车上的人数就是发车时车上的乘客数
代码
def num(i):
if i == 8: # 终点站
return 6
else:
return (num(i+1)-8+i)*2
i = eval(input())
print(num(i))
运行结果
3.猴子吃桃。有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),第九天正好吃完,问猴子们摘来了多少桃子?
代码
def peach(n):
if n > 9:
return 0
elif n == 9:
return 2 # 第九天还有两个桃子,都被吃了
else:
return (peach(n+1)+1)*2
print("猴子们摘来了:{}个桃子".format(peach(1)))
sum = peach(1)
for i in range(1, 10):
print("第{}天吃了{}个桃子,剩余桃子数为{}". format(i, sum-peach(i+1), peach(i+1)))
sum = peach(i+1)
运行结果
4.小华读书。第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此……,第六天读完了最后的三页,问全书有多少页?
代码
def num(n):
if n > 6:
return 0
elif n == 6:
return 3
else:
return (num(n+1)+2)*2
print("全书共:{}页".format(num(1)))
sum = num(1)
for i in range(1, 7):
print("第{}天读了{}页,剩余{}页". format(i, sum-num(i+1), num(i+1)))
sum = num(i+1)
运行结果
5. 30个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?
题目分析
由题意可知,一次可以上一阶或两阶阶梯,由此可以列出当有一阶,两阶,三阶,四阶,五阶…它们的走法,可以推导出递推公式。
因为只能是一阶一阶上或者两阶两阶上,所以到达顶点的最后一步不是一阶就是两阶,倒数第二步也是这样
边界条件:当阶梯数为1和0时,都只有一种走法
递推公式:step(n)=step(n-1)+step(n-2)
代码
def step(n):
if n <= 1:
return 1
else:
return step(n-1)+step(n-2)
n = eval(input())
print(step(n))
运行结果
大家有什么好的题目和想法可以留言~~~