Python 08 函式 遞迴解決漢諾塔問題

2021-10-08 23:22:41 字數 2599 閱讀 8115

3. 函式的返回值

4. 文件字串

5. 函式的作用域

6. 命名空間

7. 遞迴函式

8.練習

2.1 形參和實參

一、函式中使用:

形參出現在函式定義中,在整個函式體內都可以使用, 離開該函式則不能使用。

實參出現在主調函式中,進入被調函式後,實參變數也不能使用。

二、呼叫

形參變數只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數。

實參可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先用賦值,輸入等辦法使引數獲得確定值。

三、不是指標型別在記憶體中位置不同:

當形參和實參不是指標型別時,在該函式執行時,形參和實參是不同的變數,他們在記憶體中位於不同的位置,形參將實參的內容複製乙份,在該函式執行結束的時候形參被釋放,而實參內容不會改變。

舉例:比如你定義乙個函式void add(int a, int b),這裡的a和b就是形參。

當你進行函式呼叫的時候,add(1, 2),這裡的1和2就是實參。

擴充套件資料

形參的作用是實現主調函式與被調函式之間的聯絡,通常將函式所處理的資料,影響函式功能的因素或者函式處理的結果作為形參。

沒有形參的函式在形參表的位置應該寫void.main 函式也可以有形參和返回值,其形參也稱為命令列引數,由作業系統在啟動程式時初始化,其返回值傳遞給作業系統。

兩者關係:

在一般傳值呼叫的機制中只能把實參傳送給形參,而不能把形參的值反向地傳送給實參。因此在函式呼叫過程中,形參值發生改變,而實參中的值不會變化。而在引用呼叫的機制當中是將實參引用的位址傳遞給了形參,所以任何發生在形參上的改變實際上也發生在實參變數上。總結

2.2 函式的傳遞方式

def

t(a=

1,b=

2,c=3)

:print

("a+b+c="

, a+b+c)

t()t(4,5

)

a+b+c= 6

a+b+c= 12

2.3 不定長引數
def

sum(

*a):

result =

0for i in a:

result += i

print

(result)

sum(1,

2,3,

4,5,

6,7,

8,9)

45
def

t(a,b,

*c,**d)

:print

(a)print

(b)print

(c)print

(d)t(1,

2,3,

4,5, d=

6, f =

7)

1

2(3, 4, 5)

2.4 引數的解包

全域性作用域

函式作用域

漢諾塔遊戲

現在有abc三根柱子。要求:將a柱所有的圓盤放到c柱。在移動的過程中可以借助b柱。並且規定大圓盤不能放小圓盤上面,每次只能移動乙個盤子。用遞迴的方式來解決漢諾塔問題

# num表示起始a柱上的圓盤的個數,a,b,c分別表示'a','b','c'三個柱子

defhannuotower

(num, a, b, c)

:if num ==1:

# 當num等於1時

# 直接將a上的圓盤移動到c上

print

("第 1 個盤子從"

, a,

"->"

, c)

else

:# 當num大於1時

# 可將一堆圓盤看做兩個盤子(最下面的乙個圓盤,上面的所有圓盤),這是解題的關鍵

# 由此可將問題簡單的視為三個步驟:

# 1.a借助c將上面的所有圓盤移動到b上

hannuotower(num-

1, a, c, b)

# 2.將a最下面的圓盤移到c上

print

("第"

, num,

"個盤子從"

, a,

"->"

, c)

# 3.b借助a將上面所有的圓盤移動到c上

hannuotower(num-

1, b, a, c)

hannuotower(3,

'a',

'b',

'c')

第 1 個盤子從 a -> c

第 2 個盤子從 a -> b

第 1 個盤子從 c -> b

第 3 個盤子從 a -> c

第 1 個盤子從 b -> a

第 2 個盤子從 b -> c

第 1 個盤子從 a -> c

Python08 類的繼承

重用現有類的功能,並在此基礎上進行擴充套件。子類直接具有父類的成員 共性 還可以擴充套件新功能。耦合度高,父類的變化直接影響子類。父類相對於子類更抽象,範圍更寬泛 子類相對於父類更具體,範圍更狹小。父類 class cat object def init self self.color red de...

python08 檔案操作

檔案 1.唯讀 r,rb rb是讀位元組 2.只寫 w,wb 清除之前的東西,重新寫進去內容。3.追加 a,ab 表示寫東西 4.r 讀寫 5.w 寫讀 6.a 寫讀 追加寫讀 我們使用open 函式來開啟乙個檔案,獲取到檔案控制代碼,然後通過檔案控制代碼就可以進行各種各樣的操作了。根據開啟方式的不...

學python(08) 字串函式

字串函式 用字串中的指定字元切割字串split result strs.split 輸入 n 代表用換行分割 用回車進行字串分割splitlines result strs.splitlines 用指定的字串將容器內的字串鏈結成乙個字串 joinresult join lists 0填充函式zfil...