作用域、區域性和全域性變數
遞迴函式式程式設計
高階函式和eval()函式
在函式內部,可以呼叫其他函式。但是乙個函式在內部呼叫自身,這個函式被稱為遞迴函式。
那遞迴具體是怎麼實現的吶?下面我們就來看看如下**:12
3456
78910
1112
1314
15def
calc(n):
print
(n)
if
int
(n
/
2
)
=
=
0
:
#結束符
return
n
return
calc(
int
(n
/
2
))
#呼叫函式自身
m
=
calc(
10
)
print
(
'----->'
,m)
#輸出結果
10
5
2
1
-
-
-
-
-
>
1
#最後返回的值
看到這邊,有限小夥伴有些矇圈,好吧,下面我用乙個圖,來解釋一下吧!請看圖:
根據**,最後一層,一定需要乙個結束符,來結束。
我們再來舉乙個經常用到的例子,1+2+3+4+.....+100的例子:12
3456
78910
def
add_to_100(n):
if
n
=
=
0
:
return
n
return
n
+
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 擴充套件,將乙個列表中的元素新增到另...