日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是递归?递归的理解

發(fā)布時間:2023/12/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 什么是递归?递归的理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.什么是遞歸?

????????遞歸,就是在運行的過程中不斷地調(diào)用自己。遞歸有兩個過程,簡單的說一個是遞的過程,一個是歸的過程。簡單用代碼來理解:

public void fun(參數(shù)) {if (終止條件) {return;}fun(參數(shù));(其他判斷條件或語句); }

? ? ?? 在上邊代碼中,當?shù)谝淮芜M入函數(shù)時,先判斷是否符合終止條件,符合則直接結(jié)束函數(shù),不符合入下一語句,調(diào)用自己重新進入下一層自身函數(shù),(注意這是最外一層將不向下繼續(xù)執(zhí)行語句,外層卡在fun(參數(shù)處)),這個調(diào)用自己進入自身函數(shù)的操作過程即為“遞”的過程。假設(shè)進入下一層后符合終止條件,返回結(jié)果,此時之前進入自身函數(shù)執(zhí)行完成返回最外一層函數(shù),最外一層函數(shù)遞歸調(diào)用處得到結(jié)果,(即內(nèi)層函數(shù)執(zhí)行完成得到結(jié)果返回值),這個過程即為“歸”的過程。這時最外一層函數(shù)才能繼續(xù)執(zhí)行下一語句,直至函數(shù)運行完成。


二.判斷遞歸使用的場景

1.大問題可以拆分為多個子問題。

2.原問題和拆分后的子問題除了數(shù)據(jù)規(guī)模不同,解決思路完全相同。

3.存在遞歸終止條件。

遞歸在線性數(shù)據(jù)結(jié)構(gòu)中使用不太明顯,迭代基本可以很容易的解決問題。

遞歸在非線性結(jié)構(gòu)中非常重要,比如二叉樹,回溯,典型的樹形問題-九宮格字母組合

三.遞歸代碼的寫法,(一定要注意方法的語義)

遞歸必須具備兩個條件,

一是有邊界,即終止條件。

二是需要調(diào)用自己。

這兩個條件缺一不可,并且其中終止條件語句必須在遞歸調(diào)用語句之前。如果順序顛倒則遞歸函數(shù)會進入死循環(huán),永遠退不出來,會出現(xiàn)堆棧溢出異常(StackOverflowError)。

在遞歸函數(shù)中,終止條件可以不只一個,遞歸調(diào)用也可以通過一些邏輯語句分成好幾個。


三.講一個簡單且經(jīng)典的實例(我認為的)

青蛙跳臺階問題:一只青蛙要跳上n層高的臺階,一次能跳一階,也可以跳2階,請問這只青蛙跳上n層高的臺階有多少種跳法?

問題解決:這個問題有好幾種解法,這里就講遞歸方法,這個問題需要逆向思維,如果從第一個臺階就開始算,就比較難想到終止條件,以及遞歸調(diào)用方式。我們可以讓青蛙下臺階,一次可以下一個,也可以下兩個。這時我們可以知道:

當n=1時,只有一種方法。

當n=2時,有兩種方法。

其n>2時,青蛙可以選擇跳兩層臺階,也可以選擇跳一層臺階。

以上我們可以得到,終止條件為臺階剩下1或2層時可以直接得到結(jié)果,即為邊界。當n>2時我們可以使用遞歸語句調(diào)用自身。這樣就可以寫出遞歸代碼:

public int climbStairs(int n){//終止條件if(n == 1)return 1;if(n == 2)return 2;//遞歸調(diào)用,此時青蛙可以選則跳一階也可以跳兩階,所以將兩種情況相加起來return climbStairs(n-1) + climbStairs(n-2); }

總結(jié)

以上是生活随笔為你收集整理的什么是递归?递归的理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。