所謂遞歸其實就是函數本身調用函數,直到滿足指定條件之後一層層退出函數, 例如
從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?“從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?‘從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?……’”
利用函數編寫一個斐波那契數列
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368
斐波那契數列就是前面給兩個數相加得到後面一個數,依次往後
代碼如下
<code>#!/usr/bin/env python</code>
<code># _*_ coding: utf-8 _*_</code>
<code>def</code> <code>Counter(n1, n2):</code>
<code> </code><code>if</code> <code>n1 > </code><code>10000</code><code>: </code><code># 當要計算的值大于10000就退出</code>
<code> </code><code>return</code>
<code> </code><code>print</code><code>(</code><code>"Counter:"</code><code>, n1) </code><code># 輸出目前計算到那個值了</code>
<code> </code><code>n3 </code><code>=</code> <code>n1 </code><code>+</code> <code>n2 </code><code># 第一個值加上第一個值等于第三個值</code>
<code> </code><code>Counter(n2, n3) </code><code># 調用計數器函數,此時第一個值是調用函數傳過來的最後一個值,而第二個值是計算出來的第三個值</code>
<code> </code>
<code>Counter(</code><code>0</code><code>, </code><code>1</code><code>) </code><code># 調用計數器函數</code>
輸出結果
<code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>python3.</code><code>5</code> <code>/</code><code>home</code><code>/</code><code>ansheng</code><code>/</code><code>Documents</code><code>/</code><code>PycharmProjects</code><code>/</code><code>blogcodes</code><code>/</code><code>斐波那契.py</code>
<code>Counter: </code><code>0</code>
<code>Counter: </code><code>1</code>
<code>Counter: </code><code>2</code>
<code>Counter: </code><code>3</code>
<code>Counter: </code><code>5</code>
<code>Counter: </code><code>8</code>
<code>Counter: </code><code>13</code>
<code>Counter: </code><code>21</code>
<code>Counter: </code><code>34</code>
<code>Counter: </code><code>55</code>
<code>Counter: </code><code>89</code>
<code>Counter: </code><code>144</code>
<code>Counter: </code><code>233</code>
<code>Counter: </code><code>377</code>
<code>Counter: </code><code>610</code>
<code>Counter: </code><code>987</code>
<code>Counter: </code><code>1597</code>
<code>Counter: </code><code>2584</code>
<code>Counter: </code><code>4181</code>
<code>Counter: </code><code>6765</code>
<code>Process finished with exit code </code><code>0</code>
利用遞歸擷取斐波那契數列中的第10個數,并将該值傳回給調用者
代碼:
<code>def</code> <code>Counter(Index, Start, End):</code>
<code> </code><code>print</code><code>(</code><code>"第%d次計算,第一個數字是%d,第二個數字是%d"</code> <code>%</code> <code>(Index, Start, End))</code>
<code> </code><code>if</code> <code>Index </code><code>=</code><code>=</code> <code>10</code><code>: </code><code># 如果要計算的值是10就退出</code>
<code> </code><code>return</code> <code>Start</code>
<code> </code><code>N </code><code>=</code> <code>Start </code><code>+</code> <code>End </code><code># N等于第一個數加上第二個數</code>
<code> </code><code>Number </code><code>=</code> <code>Counter(Index </code><code>+</code> <code>1</code><code>, End, N) </code><code># 繼續調用計數器函數,End相當與傳給函數的第一個數,N是傳給函數的第二個數</code>
<code> </code><code>return</code> <code>Number</code>
<code>result </code><code>=</code> <code>Counter(</code><code>1</code><code>, </code><code>0</code><code>, </code><code>1</code><code>)</code>
<code>print</code><code>(</code><code>"得出的數字是:"</code><code>, result)</code>
<code>/</code><code>usr</code><code>/</code><code>bin</code><code>/</code><code>python3.</code><code>5</code> <code>/</code><code>home</code><code>/</code><code>ansheng</code><code>/</code><code>Documents</code><code>/</code><code>PycharmProjects</code><code>/</code><code>blogcodes</code><code>/</code><code>遞歸.py</code>
<code>第</code><code>1</code><code>次計算,第一個數字是</code><code>0</code><code>,第二個數字是</code><code>1</code>
<code>第</code><code>2</code><code>次計算,第一個數字是</code><code>1</code><code>,第二個數字是</code><code>1</code>
<code>第</code><code>3</code><code>次計算,第一個數字是</code><code>1</code><code>,第二個數字是</code><code>2</code>
<code>第</code><code>4</code><code>次計算,第一個數字是</code><code>2</code><code>,第二個數字是</code><code>3</code>
<code>第</code><code>5</code><code>次計算,第一個數字是</code><code>3</code><code>,第二個數字是</code><code>5</code>
<code>第</code><code>6</code><code>次計算,第一個數字是</code><code>5</code><code>,第二個數字是</code><code>8</code>
<code>第</code><code>7</code><code>次計算,第一個數字是</code><code>8</code><code>,第二個數字是</code><code>13</code>
<code>第</code><code>8</code><code>次計算,第一個數字是</code><code>13</code><code>,第二個數字是</code><code>21</code>
<code>第</code><code>9</code><code>次計算,第一個數字是</code><code>21</code><code>,第二個數字是</code><code>34</code>
<code>第</code><code>10</code><code>次計算,第一個數字是</code><code>34</code><code>,第二個數字是</code><code>55</code>
<code>得出的數字是: </code><code>34</code>
本文轉自 Edenwy 51CTO部落格,原文連結:http://blog.51cto.com/edeny/1915098,如需轉載請自行聯系原作者