python 之遞歸及冒泡排序


一.遞歸函數

在函數內部,可以調用其他函數,如果一個函數在內部調用本身,這個函數就是遞歸函數

1.遞歸的基本原理

  • 每一次函數調用都會有一次返回.當程序流執行到某一級遞歸的結尾處時,它會轉移到前一級遞歸繼續執行(調用本身函數)
  • 遞歸函數中,位於遞歸調用前的語句和各級被調函數具有相同的順序
  • 雖然每一級遞歸有自己的變量,但是函數代碼並不會得到復制
  • 遞歸函數中必須包含可以終止遞歸調用的語句

舉例:

>>> def fun2(i):
...     r = fun2(i+1)
...     return r

遞歸函數中沒有包含終止遞歸調用的語句,此函數將一直返回循環執行下去,加終止條件當滿足條件時會結束函數

def fun(i):
    print(i)
    if i == 5:
        return 5
    r = fun(i + 1)
    return r
fun(1)

 

舉例:

階乘,計算整數n:n!=1*2*3*4*5*..*n

如果用函數fun(n) 可以表示為:

fun(n)=1*2*3*4*5*..*n=fun(n-1)*n

如果用遞歸函數

>>> def fun(n):
...     if n == 1:
...             return 1
...     return fun(n-1) * n
...
>>> fun(2)
2
>>> fun(10)
3628800

舉例:

寫函數,利用遞歸獲取斐波那契數列中的第 10 個數,並將該值返回給調用者

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def
fun2(depth, a1, a2): if depth == 10: return a1 a3 = a1 + a2 r = fun2(depth + 1, a2, a3) return r ret = fun2(1,0,1) print(ret)

遞歸小結:

   遞歸的目的是簡化程序設計,使程序易讀。   
    但遞歸增加了系統開銷。 時間上, 執行調用與返回的額外工作要占用CPU時間。空間上,隨着每遞歸一次,棧內存就多占用一截。    

二.冒泡排序

  冒泡排序一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。

 

冒泡排序算法的運作如下:

 

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。這步做完后,最后的元素會是最大的數。
  3. 針對所有的元素重復以上的步驟,除了最后一個。
  4. 持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。

 

例:

 

li = [22, 12, 33, 21]
for i in range(1,len(li)):
    for j in range(len(li) - i):
        if li[j] > li[j + 1]:
            temp = li[j]
            li[j] = li[j + 1]
            li[j + 1] = temp
print(li)

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM