演算法之遞迴

2021-08-04 06:46:32 字數 1645 閱讀 2834

自從學了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 ...