欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python小球落地問題及解決(遞歸函數(shù))

 更新時間:2022年05月18日 09:33:23   作者:菠蘿魷  
這篇文章主要介紹了python小球落地問題及解決(遞歸函數(shù)),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

問題

一個球從 100 米高的自由落下,每次落地后反跳回原高度的一半。求第10次彈起的高度與途徑的總路程

什么是遞歸函數(shù)

函數(shù)的遞歸調(diào)用是函數(shù)嵌套調(diào)用的一種特殊形式,在調(diào)用一個函數(shù)的過程中又直接或者間接地調(diào)用該函數(shù)本身,稱之為函數(shù)的遞歸調(diào)用

遞歸死循環(huán)是沒有意義的

遞歸調(diào)用必須有兩個明確的階段:

1. 回溯: 一次次遞歸調(diào)用下去,說白了就一個重復的過程,

  • 但需要注意的是每一次重復問題的規(guī)模都應該有所減少,
  • 直到逼近一個最終的結(jié)果,即回溯階段一定要有一個明確的結(jié)束條件

2. 遞推: 往回一層一層推算出結(jié)果

例子

假設(shè)有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,然后形成一個數(shù)學格式:

age(n) = age(n-1) + 2 ? ? # n>1
age(n) = 18 ? ? ? ? ? ? ? # n=1

這時候只需要創(chuàng)建函數(shù),把這兩塊寫入,即可完成遞歸函數(shù)的創(chuàng)建:

def age(n):
? ? if n == 1:
? ? ? ? return 18
? ? if n > 1:
? ? ? ? return age(n-1) + 2
print(age(5))

小球落地解題思路

首先我們需要注意三個點

1、小球從100米高度落下,所以小球在第一次彈起的過程中就已經(jīng)行走了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遞歸函數(shù)介紹

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】遞歸的規(guī)模要比上次的小

【3】遞歸的效率很低,可以通過程序調(diào)試看出,進去是幾層出來又得幾層,使得存儲空間變大。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論