遞迴的理解

2022-08-15 19:12:10 字數 1262 閱讀 6082

事實上,我們並不是每個函式都需要跟進去看執行結果的,比如我們在自己的函式中呼叫printf函式時,並沒有鑽進去看它是怎麼列印的,因為我們相信它能完成列印工作。

如果你相信你正在寫的遞迴函式是正確的,並呼叫它,然後在此基礎上寫完這個遞迴函式,那麼它就會是正確的,從而值得你相信它正確。

以上兩句話就是要明白乙個道理:不要把自己放進遞迴函式中,放進一些簡單的遞迴如階乘,可能你還能理解,但是換個求全排列這樣複雜點的遞迴函式你可能就懵逼了。你要站在乙個上帝視角去看待問題,就像走迷宮,你不知道正確的路線就往裡面走,那麼你一定會迷路的,但是如果我站在高處的地方把正確的路線找到了,那我走迷宮的時候就不會迷路了。所以不要主觀的看待,客觀的把它當做乙個人,你交給他的任務他一定能夠完成的,你也千萬別替他安排任務該如何去完成。

遞迴演算法概念是函式呼叫自己來實現的某種功能,按以下方法理解遞迴你會恍然大悟(如果你對遞迴有疑惑的話),並覺得遞迴是如此簡單:

1.遞迴是高中數學中的數列那一章講的內容。數列這章講了乙個概念叫遞推公式:如果已知數列的第1項(或前幾 項),且從第二項(或某一項)開始的任一an與它的前一項an-1(或前幾項)間的關係可以用乙個公式來表 示,那麼這個公式就叫遞推公式,遞推公式是給出數列的一種方法。

2.例如斐波那契數列的遞推公式就是:an=an-1+an-2(n>2,a1=1,a2=1)

3.那麼現在如果想用遞迴的方式表示斐波那契數列即可定義函式f(n):當n>2時f(n)=f(n-1)+f(n-2);當n=1時f(n)=1,當n=2時f(n)=1;

即private static int fibonaccire(int i)

5.總結:我們為什麼有些人很難理解遞迴函式呢,我個人覺得是我們在學計算機語言的時候都是在大學裡學的,然後 此時的高中數學知識已經忘卻了,取而代之的是我們把我們的大腦陷在了遞迴方法呼叫的過程中了,比如,要一 步步該怎麼呼叫了。如果我們要結合高中數學中的這個概念的話就一點也不難理解遞迴,反倒覺得遞迴的演算法一 眼看去就很明白,我個人以前難於理解遞迴是因為只要我看到了遞迴我的腦子就在迴圈的一層層的往下繼續調 用,覺得很難理解,其實我們完全不要去想那一層層的呼叫關係,反而想到遞迴就把他抽象出來乙個遞推公式, 這樣你就會恍然大悟的感覺,原來遞迴如此簡單。我們以前不好理解遞迴是我們自己的給自己製造了理解它的障 礙。覺得理解這個就跟用眼在電腦上看懂三維立體畫有異曲同工之妙。現在如果只要給你在紙上寫出了乙個 遞推公式,你立馬就可以用遞迴函式寫出來。呵呵。。遞迴是不是很簡單呢?!其實我們的計算機演算法都**於 數學,計算機演算法是數學應用於生產的很好的乙個例子!

6.附:斐波那契數列的非遞迴演算法,由於遞迴很耗資源,所以不到迫不得已盡量不要用遞迴演算法

遞迴的理解

對於遞迴問題,一定要明確的一點是,初始呼叫該函式時的輸入是什麼樣的 遞迴能夠奏效的前提是,問題的規模一定是減少的,或者更為嚴謹地說,問題一定是朝著遞迴結束的條件執行的 遞迴函式的第乙個要執行的就是 if 判斷,也即每進入一次遞迴,都要首先判斷是否到達遞迴的結束,n 0 其次還要明晰遞迴函式的功能,是...

遞迴的理解

本篇文章只要是實現最大公倍數的遞迴實現方法。最大公倍數是指兩個數能夠被一組數同時整除,其中最大的那個數就叫做最大公倍數,求解最大公倍數這裡主要說兩個想法,其實就是將複雜的問題簡化逐步簡化到乙個很小的問題,然後求得答案。假設有兩個數 252和105 252 21 12 105 21 5 252 105...

遞迴的理解

先考慮第一步,在考慮第二步,第二步可能與第一部的解法思路相同,範圍卻小了 然後一直分解。直到邊界有返回值 特例 下面是個關於遞迴呼叫簡單但是很能說明問題的例子 cpp view plain copy 遞迴例子 include void up and down int int main void vo...