分治策略 函式與模組

2021-10-10 03:26:43 字數 2506 閱讀 9694

定義:函式就是乙個被封裝好的具有特定功能的**段。

特點:可以重複使用(復用性)。

自定義函式

1.普通函式

2.匿名函式

def 函式名(

[引數]):

#定義函式

'''注釋'''

函式體函式名(

[實參]

)#執行函式

例如:

def

printlnfo()

:print

('天生我才,必有用』)

print

('人生苦短,我用python『)

printlnfo(

)#執行函式

引數作為函式的輸人,引數又分為形參,實參

形參:本質上乙個區域性變數;由於接收函式,怪不得資料,他是定義函式時,定義的。

實參:在函式呼叫執行時,傳遞的資料。

返回值:將函式中的區域性變數傳遞到函式外部

return返回值

def

add(a,b)

:return a+b #返回a+b的值

c = add(1,

2)#c = 3

注釋:return語句一旦執行,函式就會終止,其後的其他語句都不會執行

變數作用域:變數起作用的範圍。

區域性變數:函式內部定義的變數包括形參,只能在函式內部被呼叫。

全域性變數:在整個函式中都可以被呼叫的變數,一般直接定義在函式的外部,或者用global關鍵字在函式內部定義。(除非被刪除掉否則一直存活到指令碼執行結束)

注:在函式使用全域性變數時,可以呼叫全域性變數的值,不能直接修改全域性變數(值如果是可變型別,值可以改變)

位置引數:形參的負值時和形參定義的順序一致。

命名引數:可以不按照順序複製,複製時形參等於失碳。

預設值引數:定義形參時

可變長度引數:在普通引數前加*,

例: *args,會將n個引數放到乙個元組中。

可變長度的命名引數:在普通引數前加**,

例:**kwarg,以字典的方式接收資料。

匿名函式:lambda 表示式

lambda 引數1,引數2…:返回值

例如:

lambda x:x%2!=

0

遞迴函式:程式呼叫自身的程式設計技巧稱為遞迴(recursion)。

#使用遞迴方法實現5!

def

func

(n):

if n ==

1or n ==0:

return

1else

:return n * func(n-1)

print

(func(5)

)

遞迴函式優缺點遞迴函式示例:要求輸入乙個數字表示是第幾個數字,正確輸出第n個斐波那契數

def

fun(n)

:if n <0:

print

('輸入有誤!』)

elif n ==

1or n ==2:

return

1else

:return fun(n-1)

+ fun(n-2)

print

(fun(6)

)

生成器函式:(generator)

我們之前學過元組生成器.

(i for i in range(10))
生成器就是包含yield關鍵字的函式。本質上來說,關鍵字yield是乙個語法糖,內部實現支援了迭代器協議。同時,yield內部是乙個狀態機,維護著掛起和繼續的狀態。(節省記憶體空間)

例:生成器–斐波那契

def()

: a,b =1,

1while

true

:yield a #暫時執行,需要時再產生乙個新元素

a,b = b,a+b #繼續生成新元素

a = f(

)for i in

range(10

):print

(next

(a),end=

'')

由於水平限制,此次的學習筆記到此次結束,有什麼不對的希望大家指導!

遞迴與分治策略

1 全排列問題 設r n 是要進行排列的n個元素。集合x中元素的全排列記為perm x 求r n 的全排列perm r n 用遞迴演算法求解 1 找出遞迴子結構性質 即原問題的解包含了子問題的解,且子問題的描述與原問題相同。這就可以用子問題的解來構造原問題的解。設r i r n 這是乙個子問題。設 ...

遞迴與分治策略

1.遞迴 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。1 階乘函式 include using namespace std int main int factorial int n 2 fibonacci數列 include using namespace st...

分治策略與遞迴

先看 資料結構與演算法分析 中對分治策略的解釋 把問題分成兩個大致相等的子問題,然後再遞迴地對他們進行求解,這是 分 治 階段將兩個子問題的解合併到一起並可能再做些少量的附加工作,最後得到整個問題的解。由定義可以看出,分治需要進行兩步操作 分 將問題恰當的劃分為需要迭代處理的兩個子問題,治 將兩個子...