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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

浅谈递归

發(fā)布時間:2025/6/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈递归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定義

英文定義:Recursion is the process of repeating items in a self-similar way.

具體到計算機中去:

遞歸:又稱為遞回,在數學和計算機科學中,是指在函數的定義中使用函數自身的方法.

[以上定義來源為wiki].

英文的Recursion表達的是重復發(fā)生,再次重現(xiàn)的意思.而對應的中文翻譯”遞歸”確表達了兩個意思:” 遞”+”歸”.這兩個意思,正是遞歸思想的精髓.

遞歸思想

遞歸的基本思想是:把規(guī)模大的問題轉化為規(guī)模小的相似的子問題來解決.這種思想與數學中的歸納法十分相近。

遞歸在程序中的表現(xiàn):在函數實現(xiàn)遞歸時,因為解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況.需要注意的是,遞歸函數必須有明顯的結束條件(base case),避免產生無限遞歸的情況.

經典示例:N的階乘問題

??? 我們知道5!=5*4*3*2*1;4!=4*3*2*1;…

?????????? ?5!=5*4!...

??? 從上面我們可以歸納出N!=N*(N-1)!,由此函數的代碼如下:

public static long factorial(int n){if(n==1) // base casereturn 1;else // reduction stepreturn n*factorial(n-1);}

Base case:基線條件,遞歸的終止條件

Reduction step:遞歸操作,對問題的定義.

遞歸vs循環(huán)

???????? 從大多數情況來看,遞歸和循環(huán)是可以相互轉換的.例如上面的階乘問題,如果計算的階乘的方法是n!=n*(n-1)*….*2*1,就明顯是一個循環(huán)的過程,如果計算階乘的方法是n=n*(n-1)!,這就歸納出了一個遞歸定義。循環(huán)要求思考一個問題怎么做,而遞歸要求思考一個問題的定義(某Lisp開發(fā)者說的).

???????? 實際開發(fā)中,循環(huán)更加常見,但有些情況下,可能需要將循環(huán)轉為遞歸(面試).遞歸與循環(huán)其實想通的地方挺多,它們都需要初始條件和終止條件.用遞歸解決循環(huán)問題,需要明確基線條件和定義遞歸問題(每一步遞歸操作的算法),本人在面試過程中遇到過一個這樣問題:求兩個數的最大公約數,不使用循環(huán).其實,從后面那句”不使用循環(huán)”就明顯是考遞歸的。Java代碼如下:

// 輾轉相除法求兩個數的最大公約數public static int gcd(int num1,int num2){// check argsif(num1==0 || num2==0){return 0;}// num1>num2int tmp = num1;num1 = Math.max(num1,num2);num2 = Math.min(tmp, num2);int p = num1%num2;/*while(p!=0){num1 = num2;num2 = p ;p = num1%num2;}*/if(p!=0)return gcd(num2,p);return num2;}

?

從上面可以看到,循環(huán)轉遞歸時要把握兩個點:

  • 循環(huán)的終止條件與遞歸中的基線條件
  • 循環(huán)中的算法與遞歸的算法

應用

當問題的定義本身就是遞歸形式的時候,可以考慮使用遞歸.數據結構里面的“樹”就是典型的遞歸定義。還有如上面說的階乘,漢諾塔問題,斐波拉契數列等.都可以使用來遞歸解決問題.

使用遞歸可以使用緊湊和優(yōu)雅的代碼來解決看起來很”嚇人”的問題.但實際中,遞歸并不十分常見.首先,函數執(zhí)行過程中,??臻g的分配是有限的,如果遞歸的深度過大,就會造成??臻g的溢出.其次,遞歸提高了程序的書寫效率,但并不意味著執(zhí)行效率的提高.一般來說,遞歸的執(zhí)行效率未必比循環(huán)高,因為在棧上開辟新空間、分配局部變量都是需要時間開銷的,特別是遞歸深度很大的時候。所以,學習遞歸主要是學習其思想—把規(guī)模大的問題轉化為規(guī)模小的相似子問題來解決。

借鑒知乎上某資深碼農的一句話,個人覺得說的很好:

???????? 當你的問題分析透徹,何時使用遞歸就會自然明了。遞歸只是一種函數調用的技巧,不是解決問題的公式。一個問題可以用遞歸做,也可以不用遞歸做,遞歸不是必須的。所以,理解你需要解決的問題,想清楚解決問題的步驟方法,你會突然發(fā)現(xiàn),原來可以用遞歸來簡化問題。不要一開始就想著如何用遞歸。

參考資料:

? ?http://zh.wikipedia.org/wiki/%E9%80%92%E5%BD%92

? ?http://www.zhihu.com/question/20507130

? ?http://www.zhihu.com/question/20096035

? ?http://www.ibm.com/developerworks/cn/linux/l-recurs.html

轉載于:https://www.cnblogs.com/heavenyes/p/3822663.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的浅谈递归的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品视频在线观看免费 | 懂爱av | 五月天丁香在线 | 国产免费91视频 | 日本一区二区久久 | 国产农村av| 毛片xxx| 粉嫩一区二区三区 | 成人精品水蜜桃 | 国产亚洲精品久久久久久打不开 | 在线看片你懂的 | 进去里视频在线观看 | 国内自拍偷拍网 | 人人爽av| 黑人三级视频 | 久久精品视频免费播放 | 成人在线精品视频 | 丁香啪啪综合成人亚洲 | 欧美a网 | 好av| 亚洲天堂精品在线观看 | 午夜日韩精品 | 成人免费毛片aaaaaa片 | 综合网在线观看 | 婷婷精品一区二区三区 | 欲求不满的岳中文字幕 | 国产三极片| 中文字幕人妻伦伦 | 999热| 美女扣逼喷水视频 | 久久久久99精品成人片试看 | 干美女av | 超碰人操 | 亚洲天堂2018av | cao久久| 黄色成年视频 | 性欧美在线观看 | 婷婷社区五月天 | 麻豆成人精品 | 青青青网| 成人p站在线观看 | 一二区免费视频 | 无码精品在线观看 | 黄色av免费 | 免费在线观看污 | 中文字幕一区二区在线观看 | 干爹你真棒插曲免费 | 久草色视频 | 特黄一区二区三区 | 黄色福利视频 | 成人午夜精品福利免费 | 日韩精品毛片 | 亚洲精品国产精品乱码桃花 | av网址导航 | 成人刺激视频 | 男人女人拔萝卜视频 | 亚洲最大福利网站 | 不卡三区| 2019中文在线观看 | 日本黄色不卡视频 | 三级av在线| 精品看片 | 免费麻豆 | 亚洲综合色在线 | 精品久久久久久无码人妻 | 黄色小视频入口 | 国产拍拍视频 | 五月天综合在线 | 国产综合视频在线 | 日日操夜夜 | 色爱AV综合网国产精品 | 亚洲黄色片视频 | 99热这里只有精品4 精品国产黄色 | 日韩精品电影一区 | 日韩丰满少妇无码内射 | 婷婷网址| 日本一区二区视频在线播放 | 久久精品—区二区三区舞蹈 | 日本a级一区 | 在线看国产 | 国产a久久麻豆入口 | 69av网| 国产精品一区二区欧美 | 欧美激情一区二区 | 亚洲另类视频 | 伊人久久影视 | 无码国产精品高潮久久99 | 成人小视频免费观看 | 性色视频 | 中文在线天堂网 | 在线观看亚洲欧美 | 日韩毛片一区 | 中国美女洗澡免费看网站 | 欧美www在线观看 | 青青草成人影视 | 青青草这里只有精品 | 久久中文av | 免费操人视频 | 一区二区精品视频 |