C語言進階遞歸調用

  • 2019 年 10 月 5 日
  • 筆記

我們先來了解一下什麼是遞歸?遞歸(recursion):即程式調用自身的一個編程技巧。首先,遞歸需要滿足以下2個條件:

1)有反覆執行的過程(調用自身)

2)有跳出反覆執行過程的條件(遞歸出口)那遞歸是不是就是萬能的呢?其實不然,遞歸的有優點當然就有缺點!優點:遞歸的優點是為某些編程問題提供了最簡單的解決方案。缺點:缺點是一些遞歸演算法會快速的消耗電腦的記憶體資源,另外,遞歸不方便閱讀和維護。接下來,我們用一個例子來說明遞歸的優缺點。

下面我們就來看幾個遞歸例子:

(1)階乘

(2)漢諾塔問題

(3)全排列

從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。

如1,2,3三個元素的全排列為:

(4)斐波那契數列

斐波納契數列,又稱黃金分割數列,指的是這樣一個數列:1、1、2、3、5、8、13、21、……這個數列從第三項開始,每一項都等於前兩項之和。

有趣的兔子問題:

一般而言,兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼一年以後可以繁殖多少對兔子?

分析如下:

依次類推可以列出下表:

更多乾貨筆記關注微信公眾號 : 老九學堂

Tags: