python小球落地问题及解决(递归函数)

 更新时间:2022年05月18日 09:33:23   作者:菠萝鱿  
这篇文章主要介绍了python小球落地问题及解决(递归函数),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

问题

一个球从 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】递归的效率很低,可以通过程序调试看出,进去是几层出来又得几层,使得存储空间变大。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详细介绍在pandas中创建category类型数据的几种方法

    详细介绍在pandas中创建category类型数据的几种方法

    这篇文章主要介绍了详细介绍在pandas中创建category类型数据的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • flask post获取前端请求参数的三种方式总结

    flask post获取前端请求参数的三种方式总结

    这篇文章主要介绍了flask post获取前端请求参数的三种方式总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Flask框架的学习指南之用户登录管理

    Flask框架的学习指南之用户登录管理

    本文是Flask框架的学习指南系列文章的第三篇,主要给大家讲述的是制作flask的登陆管理模块,有需要的小伙伴可以参考下
    2016-11-11
  • python中filter函数的用法示例代码

    python中filter函数的用法示例代码

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换,这篇文章主要介绍了python中filter函数的用法,需要的朋友可以参考下
    2022-12-12
  • 详解如何使用OpenCV和像素处理图像灰度化

    详解如何使用OpenCV和像素处理图像灰度化

    这篇文章主要为大家介绍了如何使用OpenCV和像素处理图像灰度化的方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Python语言开发高并发爬虫示例探讨

    Python语言开发高并发爬虫示例探讨

    这篇文章主要为大家介绍了Python语言开发高并发爬虫示例探讨,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Python读写yaml文件

    Python读写yaml文件

    这篇文章主要介绍了Python读写yaml文件,yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文件,有点类似于json格式,下面关于Python读写yaml文件的详细资料,需要的小伙伴可以参考一下
    2022-03-03
  • Python 超简洁且详细爬取西瓜视频案例

    Python 超简洁且详细爬取西瓜视频案例

    今天给大家带来一篇爬取西瓜视频的小教程,很简单的几十行代码就可以实现了,每一段代码都详细说明了用途,看完你就能够自己动手写,感兴趣的同学快来跟着小编往下看吧
    2021-11-11
  • python中把元组转换为namedtuple方法

    python中把元组转换为namedtuple方法

    在本篇文章里小编给大家整理的是一篇关于python中把元组转换为namedtuple方法,有兴趣的朋友们可以参考下。
    2020-12-12
  • Python编程入门的一些基本知识

    Python编程入门的一些基本知识

    这篇文章主要介绍了Python编程入门的一些基本知识,包括注释需和Shell命令使用等基本内容,要的朋友可以参考下
    2015-05-05

最新评论