close

 

/*

從這一章節開始,加上index,方便日後查找的時候,快速查找。

*/

Index :

Global (全局變量 )

閉包

Lambda 表達式

filter()

map()

遞歸

Hanoi

字典

 

 

 

Global (全局變量 )

 

閉包 :

如果在一個內部函數裡,對外部作用域( 但不是在全局作用域的變量進行引用 )那麼內部函數就會被認為是閉包。

 

 

 

Lambda 表達式的作用 :

 Python寫一些執行腳本時,使用lambda就可以省下定義函數過程,比如說我們只需要寫個簡單的腳本來管理服務器時間,我們就不需要專門定義一個函數然後在寫調用,使用lambda就可以使得代碼更加精簡。

 對於一些比較抽象並且整個程序執行下來只需要調用一兩次的函數,有時候給函數起個名字也是比較頭疼的問題,使用lambda就不需要考慮命名的問題。

 簡化代碼的可讀性,由於普通的函數越讀經常要跳到開頭def定義部分,使用lambda函數可以省去這樣的步驟。

 

簡介 filter()

簡介map()

遞歸 (Recursion)

語言例子[編輯]

從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?「從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?『從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?……』」

一隻狗來到廚房,偷走一小塊麵包。廚子舉起杓子,把那隻狗打死了。於是所有的狗都跑來了,給那隻狗掘了一個墳墓,還在墓碑上刻了墓誌銘,讓未來的狗可以看到:「一隻狗來到廚房,偷走一小塊麵包。廚子舉起杓子,把那隻狗打死了。於是所有的狗都跑來了,給那隻狗掘了一個墳墓,還在墓碑上刻了墓誌銘,讓未來的狗可以看到:『一隻狗來到廚房,偷走一小塊麵包。廚子舉起杓子,把那隻狗打死了。於是所有的狗都跑來了,給那隻狗掘了一個墳墓,還在墓碑上刻了墓誌銘,讓未來的狗可以看到……』」

大雄在房裏,用時光電視看著未來的情況。電視畫面中的那個時候,他正在用時光電視,看著未來的情況。電視畫面中的那個時候,他正在用時光電視,看著未來的情況……

正式定義[編輯]

數學和電腦科學中,遞迴指由一種(或多種)簡單的基本情況定義的一類物件或方法,並規定其他所有情況都能被還原為其基本情況。

例如,下列為某人祖先的遞迴定義:

  • 某人的雙親是他的祖先(基本情況)。
  • 某人祖先的雙親同樣是某人的祖先(遞迴步驟)。

斐波那契數列是典型的遞迴案例:

  • {\displaystyle F_{0}=0}(初始值)
  • {\displaystyle F_{1}=1}(初始值)
  • 對所有大於1的整數n{\displaystyle F_{n}=F_{n-1}+F_{n-2}}(遞迴定義)

儘管有許多數學函式均可以遞迴表示,但在實際應用中,遞迴定義的高開銷往往會讓人望而卻步。例如:

  • {\displaystyle 0!=1}(初始值)
  • 對所有大於0的整數n{\displaystyle n!=n\times (n-1)!}(遞迴定義)

一種便於理解的心理模型,是認為遞迴定義對物件的定義是按照「先前定義的」同類物件來定義的。例如:你怎樣才能移動100個箱子?答案:你首先移動一個箱子,並記下它移動到的位置,然後再去解決較小的問題:你怎樣才能移動99個箱子?最終,你的問題將變為怎樣移動一個箱子,而這是你已經知道該怎麼做的。

如此的定義在數學中十分常見。例如,集合論對自然數的正式定義是:1是一個自然數,每個自然數都有一個後繼,這一個後繼也是自然數。

以下是另一個可能更有利於理解遞迴過程的解釋:

  1. 我們已經完成了嗎?如果完成了,返回結果。如果沒有這樣的終止條件,遞迴將會永遠地繼續下去。
  2. 如果沒有,則簡化問題,解決較容易的問題,並將結果組裝成原始問題的解決辦法。然後返回該解決辦法。

這樣就有一種更有趣的描述:「為了理解遞迴,則必須首先理解遞迴。」或者更準確地,按照安德魯·普洛特金的解釋:「如果你已經知道了什麼是遞迴,只需記住答案。否則,找一個比你更接近侯世達的人;然後讓他/她來告訴你什麼是遞迴。」[1]

數學中常見的以遞迴形式定義的案例參見函式、集合以及分形等。

 

Php Version:


延伸應用: (hanoi)

 

 

 

 

字典的用法

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Eric 的頭像
    Eric

    一個小小工程師的心情抒發天地

    Eric 發表在 痞客邦 留言(0) 人氣()