自從學了c語言,遞迴不得解。
自淺學習演算法,遞迴得已解。
很多書上都這麼寫的,遞迴:就是間接呼叫自己或直接呼叫自己的過程叫遞迴。
話的確沒錯,初見還是較難理解,所以一般會給乙個斐波那契數列什麼的作為經典案例,不得不說我當初看的時候四個字:"頭皮發麻"。
後來慢慢接觸多了,也不覺得如何。
所謂遞迴:就是呼叫自己,不管是間接還是直接(一般都是直接呼叫)。遞迴也可以理解為迴圈,但是比迴圈占用空間大很多,**簡介是遞迴的特性,要想理解遞迴,光看是不行的,要自己動手推,最好是用筆推導過程。
下面我們來看乙個案例:
#include fun(int n)
main()
這是乙個求1+2+3+...+n的遞迴演算法,用迴圈當然更簡單,但這裡我們討論遞迴。
首先從鍵盤獲取乙個正整數n,比如我們輸入的是5.
推導過程:
1.進入到fun函式中 ,第一步判斷n(此刻n=5) == 1 假,此刻n=5,呼叫自己 fun(5-1)+5 //這裡的n我用它本身的數替換了
2.進入到fun函式中, 判斷n(此刻n=4) == 1 假,此刻n=4,繼續呼叫自己fun(4-1)+4 //把n替換成他本身的整數
3.進入fun函式中,判斷n(此刻n=3)==1 還是假,此刻n=3 ,繼續呼叫自己fun(3-1)+3//繼續替換
4.進入fun函式中,判斷n(此刻n=2)==1 還是假,此刻n=2,繼續呼叫自己fun(2-1)+2//繼續替換
5.重點來了,此時在判斷n(此刻n=1)==1 為真 ,那麼遞迴開始返回了,return 1返回了乙個1
那麼這個值就fun最後一次呼叫的值也就是編號為4fun(2-1)的值為1,fun(2-1)+2 相當於 1+2=3,返回3
那麼fun函式的fun(3-1)+3,fun(3-1)的值就是3 ,即fun(3-1)+3的值為6
那麼fun函式的fun(4-1)+4,fun(4-1)的值就是6 ,即fun(4-1)+4 =6+4 的值為10,返回10
那麼fun函式的fun(5-1)+5,fun(5-1)的值就是10 ,即fun(5-1)+5的值為15
最後return 15 ,即結果=15
這是乙個非常簡單的過程,遞迴 ,遞:傳遞(即呼叫自己),歸:回歸(return)。
再來回首看看這個題目,我們想知道1+...+5的結果是多少,那麼我們首先要知道1+2的結果,知道1+2的結果了,(1+2)+3,知道(1+2)+3的結果了我們還需要知道(1+2+3)+4的結果,到這裡子問題被依次求出 最後通過求出子問題結果 依次推出主問題結果即:遞迴
這是個較簡單的例子,但是如果推出來了,你理解遞迴會有乙個長足的進步,如有不對,謝謝指出。
演算法之 遞迴
遞迴在程式語言中簡單的理解是 方法自己呼叫自己 描敘遞迴就是自己呼叫自己,不過需要注意的地方,需要給定跳出條件 示例 1 簡單遞迴 public class test1 public static void fa int i system.out.println i fa i 1 描敘 什麼是三角數...
演算法之遞迴
什麼是遞迴?遞迴是一種演算法思想。從字面上看,遞迴包含兩層含義,傳遞和回歸。現實中有很多問題,只是傳遞而不用回歸。比如說,軍訓時,每天的一項訓練 報數 報數從頭到尾,依次傳遞,到最後乙個人停止,這時候軍官就知道了總體人數是多少,有沒有少人。假如,隊伍中有人想知道自己是幾號,怎麼辦呢?問下旁邊的人,如...
python演算法之遞迴演算法
coding utf 8 import numpy as np 遞迴演算法 i 0 def my recursion list,n global i try if list i n 基線條件 return i,i 1 else 遞迴條件 i 1 return my recursion list,n ...