python编程题评分标准_每天一道python编程题(2)

编程环境:python2

题目来源:数据结构(python语言描述) [美]Kenneth.A.Lambert 著

2.一个标准的科学实验是,抛球并且看它能够弹跳多高。一旦球的“弹跳性”已经确定了,这个比率值就会给出弹跳的指数。例如,如果球从10米高落下弹跳到6米高,这个索引就是0.6,并且球在一次弹跳之后总的运动距离就是16米。如果球继续弹跳,两次弹跳后的距离将会是:10米+6米+3.6米=19.6米。注意,每次后续的弹跳运动距离,都是到地板的距离加上这个距离的0.6倍,这个0.6倍就是球反弹回来的距离。编写一个程序,让用户输入球的一个初始高度以及允许球持续弹跳的次数。输出为球弹跳的总距离。

考虑使用while循环:

#coding:utf-8

h=float(raw_input('输入球的初始高度(m):'))

n=int(input('输入球的弹跳的最大次数:'))

i=0

sum=h

while i

sum=sum+h*0.6

h=h*0.6

i+=1

print '运动的总距离为:{0}'.format(sum)

除了循环方法以外,这里还可以使用递归的方法:

#coding:utf-8

def ball_bounce(h,n,sum=0):

if (n+1)!=0:

ball_bounce(h*0.6,n-1,sum=sum+h)

else:

print '运动的总距离为:{}'.format(sum)

h=float(raw_input('输入球的初始高度(m):'))

n=int(input('输入球的弹跳的最大次数:'))

ball_bounce(h,n)

假如采用递归方法,当递归999次以上时会栈溢出,而不排除输入n>998的情况所以我们尽量使其在递归999次前终止递归,假定考虑到当输出值两次递归差值<0.001时,我们认为递归趋于不变,以此作为输出条件之一。

#coding:utf-8

def ball_bounce(h,n,sum=0):

if (n+1)!=0 and h>0.001:

ball_bounce(h*0.6,n-1,sum=sum+h)

else:

print '运动的总距离为:{:.3f}'.format(sum)

h=float(raw_input('输入球的初始高度(m):'))

n=int(input('输入球的弹跳的最大次数:'))

ball_bounce(h,n)

节约时间所以我也不写太多了,佛系笔记,全靠悟性O O

坑1:什么时候用循环什么时候用递归

坑2:递归栈溢出问题

坑3:空间复杂度与时间复杂度问题,部分类似问题参考秦九韶算法可以优化复杂度。

ps:其中format是格式化输出问题,查阅相关资料。

有不对的地方望指证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值