目录
  • 问题
  • 什么是递归函数
    • 例子
  • 小球落地解题思路
    • 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、运行截图

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

      3、补充说明

      【1】递归必须有终止条件

      【2】递归的规模要比上次的小

      【3】递归的效率很低,可以通过程序调试看出,进去是几层出来又得几层,使得存储空间变大。

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

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。