python小球落地问题及解决(递归函数)
短信预约 -IT技能 免费直播动态提醒
问题
一个球从 100 米高的自由落下,每次落地后反跳回原高度的一半。求第10次弹起的高度与途径的总路程
什么是递归函数
函数的递归调用是函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用
递归死循环是没有意义的
递归调用必须有两个明确的阶段:
1. 回溯: 一次次递归调用下去,说白了就一个重复的过程,
- 但需要注意的是每一次重复问题的规模都应该有所减少,
- 直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件
2. 递推: 往回一层一层推算出结果
例子
假设有5个人,第五个人的年龄是第四个年龄+,以此类推
'''
age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18
'''
我们可以将第几个人定义成n,然后形成一个数学格式:
age(n) = age(n-1) + 2 # n>1
age(n) = 18 # n=1
这时候只需要创建函数,把这两块写入,即可完成递归函数的创建:
def age(n):
if n == 1:
return 18
if n > 1:
return age(n-1) + 2
print(age(5))
小球落地解题思路
首先我们需要注意三个点
1、小球从100米高度落下,所以小球在第一次弹起的过程中就已经行走了100m
2、小球最后一次弹起并没有下落
3、每次弹起的高度需要*2才是此次弹起的距离
far = [100]
def jump(n):
if n == 1:
far.append(100)
return 50
else:
b = jump(n-1) / 2
far.append(b*2)
return b
print(jump(10))
print(far)
print(sum(far)-jump(10))
python递归函数介绍
1、代码
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
print([fibonacci(x) for x in range(10)])
2、运行截图
3、补充说明
【1】递归必须有终止条件
【2】递归的规模要比上次的小
【3】递归的效率很低,可以通过程序调试看出,进去是几层出来又得几层,使得存储空间变大。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341