天天看點

2Python全棧之路系列之遞歸

所謂遞歸其實就是函數本身調用函數,直到滿足指定條件之後一層層退出函數, 例如

從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?“從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?‘從前有座山,山裡有座廟,廟裡有個老和尚,正在給小和尚講故事呢!故事是什麼呢?……’”

利用函數編寫一個斐波那契數列

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 &gt; </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,如需轉載請自行聯系原作者