两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

有過編程學習經(jīng)驗的人對于遞歸函數(shù)一定不陌生,我們經(jīng)常使用遞歸的方式來解決一系列復(fù)雜的問題,遞歸算法對于大多數(shù)問題都是很有效的,而且它也可以優(yōu)化我們的代碼,我們在使用遞歸的時候有幾點需要注意:

1) 遞歸是在函數(shù)本身調(diào)用函數(shù)本身。

2) 遞歸的效率比較低,如果有時間限制不建議使用。

3) 遞歸過程中需要有一個明確的結(jié)束條件,即遞歸出口。

下面我們就來詳細的講解一下遞歸函數(shù)。

1. 遞歸函數(shù)

我們先通過例子來看一下遞歸的簡單使用:

m = int(input('輸入一個數(shù)字:'))
def test(x):
    x += 2
    if x <100:
        test(x)
    else:
        print('最后的x為:',x)
test(m)

輸出結(jié)果為:

輸入一個數(shù)字:20
最后的x為: 100

我們來分析一下這個例子,首先第一行代碼我們輸入了一個整數(shù),最后一行把m作為實際參數(shù)傳遞到test()方法,在test()方法中,會先把x進行加2處理,然后進行一個判斷,如果x的值小于100,那么就再次調(diào)用這個函數(shù),調(diào)用的時候當前x的值作為實際參數(shù)參加調(diào)用,直到滿足x>=100的時候結(jié)束遞歸。

看下面示意圖:

       python函數(shù)5

即如果不滿足條件就回到了最外層來調(diào)用了這個函數(shù)。

2. 斐波那契數(shù)列

談起遞歸算法中經(jīng)典的問題,總是離不開斐波那契數(shù)列漢諾塔,我們在這里來講解一下如果使用遞歸去求解斐波那契數(shù)列。

首先我們要知道斐波那契數(shù)列的遞推公式為F(n)=F(n-1)+F(n-2),F(xiàn)(1)、和F(2)為1,我們可以通過遞歸來求解斐波那契數(shù)列中的某一項的值為多少。

求解斐波那契數(shù)列問題的時候我們可以采用多種方式。

首先我們使用常用的遞歸方式來解決這個問題:

N = int(input("輸入需要得到的項數(shù):"))
def fibonacci(n):
        if n <= 2:#如果小于等于2就把n置1
            return 1
        else:
            return fibonacci(n-1) + fibonacci(n-2)
print('對應(yīng)值為',fibonacci(n))

輸出結(jié)果為:

輸入需要得到的項數(shù):4
對應(yīng)值為 3

對于這種遞歸的調(diào)用方式,當我們輸入的值4的時候,會在遞歸中執(zhí)行下面的操作:

fibonacci(3)+fibonacci(2)=fibonacci(2)+fibonacci(1)+fibonacci(2)

然后我們可以看出第四項的值為1+1+1=3。

其實這種方式的求解是比較浪費時間的,因為需要進行迭代的次數(shù)太多,我們還可以采用空間替代時間的方式來求解這個問題。

代碼如下:

n = int(input("輸入需要得到的項數(shù):"))
fibonacci = [1,1]
for i in range(2,n):
    fibonacci.append(fibonacci[i-1] + fibonacci[i-2])
print('對應(yīng)值為',fibonacci[n-1])

輸出結(jié)果為:

輸入需要得到的項數(shù):4
對應(yīng)值為 3

這種方式我們首先給列表規(guī)定了前2項的值,然后對于我們要求解的項數(shù)n,我們直接通過公式把這個斐波那契數(shù)列的列表填充到我們需要的那一項,最后根據(jù)索引值直接找到對應(yīng)項輸出結(jié)果。

3. 總結(jié)

關(guān)于遞歸函數(shù)就講到這里,上面所講到需要注意的幾點大家要尤為注意遞歸出口和時間限制,出口是遞歸結(jié)束的關(guān)鍵,在很多時候,我們使用遞歸的方法會導(dǎo)致程序超出規(guī)定的時間,這時候我們就需要更換思路來求解問題,上面講的第二種方式可以幫助大家解決問題。


點贊(1)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學奧賽或C++選手的 必學C++課程

藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)