天天看点

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,如需转载请自行联系原作者