函式和常用模組 day04 遞迴(五)

2022-09-15 11:03:16 字數 2249 閱讀 6801

作用域、區域性和全域性變數

遞迴函式式程式設計

高階函式和eval()函式

在函式內部,可以呼叫其他函式。但是乙個函式在內部呼叫自身,這個函式被稱為遞迴函式。

那遞迴具體是怎麼實現的吶?下面我們就來看看如下**:12

3456

78910

1112

1314

15defcalc(n):

print(n)

ifint(n/2)==0:#結束符

returnn

returncalc(int(n/2))#呼叫函式自身

m=calc(10)

print('----->',m)

#輸出結果

10

5

2

1

----->1#最後返回的值

看到這邊,有限小夥伴有些矇圈,好吧,下面我用乙個圖,來解釋一下吧!請看圖:

根據**,最後一層,一定需要乙個結束符,來結束。

我們再來舉乙個經常用到的例子,1+2+3+4+.....+100的例子:12

3456

78910

defadd_to_100(n):

ifn==0:

returnn

returnn+add_to_100(n-1)

n=add_to_100(100)

print(n)

#輸出

5050

這個例子告訴我們,add_to_100(n-1)返回的是n-1+add_to_100(n-2)......這個就是遞迴的奧秘之處。

必須要有乙個明確的結束條件。

每次進入更深一層的遞迴時,問題規模相比上次遞迴都應該少(問題規模:比如你第1次傳進的是10,第2次遞迴應該是9...依次越來越少,不能越來越多)。

遞迴的效率不高,遞迴層次過多會導致記憶體溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧貞,每當函式返回,棧就會減一層棧貞。由於棧的大小不是無限的,所以遞迴的次數過多,會導致棧溢位)。

第3點關於這個記憶體溢位說明:棧不是無限的,它是有限的,過多會導致記憶體溢位。如圖:

函式和常用模組 day04 高階函式(七)

1 介紹 2 具體實用 3 eval 函式 高階函式 變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數。其實說白了,高階函式功能就是 把函式本身當做乙個引數,傳到另乙個函式中,然後在這個函式中做處理。如下 普通函式 def test 1 a,b return a b ...

Day04 分支和迴圈

順序結構 從上往下依次執行 分支結構 根據不同的條件,執行不同的語句 迴圈結構 根據指定的條件,重複執行某段 語法 if 表示式 執行語句 說明 要麼執行,要麼不執行,當表示式成立的之後,則執行語句 如果表示式不成立,則直接跳過整個if語句繼續執行後面的 單分支 num1 50 num2 60 需求...

列表和元祖的使用 day 04

列表 儲存資料的容器,可以放大量元素 常用操作方法 s 1,2,3,haode ke print s1 2.insert 插入 在原列表指定索引位置插入值 s 1,2,3,haode ke 中國 s.insert 0,xuexi print s 3.extend 擴充套件,將乙個列表中的元素新增到另...