0
点赞
收藏
分享

微信扫一扫

【Python递归练习】

老北京的热干面 2022-03-31 阅读 86
python

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))

运行结果


大家有什么好的题目和想法可以留言~~~

举报

相关推荐

0 条评论