求n的阶乘的算法框图_算法|从阶乘计算看递归算法
歡迎點擊「算法與編程之美」↑關注我們!
本文首發于微信公眾號:"算法與編程之美",歡迎關注,及時了解更多此系列文章。
1
理解遞歸
“程序設計是實踐計算機思維的重要手段”。
程序設計的三種特征就是封裝、繼承和多態。而對于算法新手來說函數作為封裝代碼是最常見的,他既可以被內部函數調用也可以被其他程序調用。而這種調用自身的方式就稱為遞歸。
舉一個現實例子,照鏡子時看到的自己就是遞歸。
遞歸算法在數學階乘的計算中體現的淋漓盡致,階乘是排列組合的結果,任何大于1的自然數n階乘可以表示為:n!=1×2×3×……×n?,設得到的積是x,x就是n的階乘。他的定義是
這個函數的實現必然是有規律的。通常來說,我們可以用循環的方式來解決,但循環設計會很復雜,加大了代碼量。而仔細觀察我們可以發現蘊含在定義中的遞推原理,第二個數都是第一個數減1,一直到最后一個數為1,這說明階乘計算的數都是比他小1的數的階乘。還要注意的是,階乘必須是在自然數的范圍內,而對于特殊的自然數0,數學家規定為0!=1,所以0!=1!。
也正是因為0的特殊性,我們可以把階乘按0與非0的標準來區分,也就得到以下表達式:
對于這個特殊的階乘0!,我們稱他為基例,也就是最小的且不需要計算求得的解。基例的重要性不言而喻,如果沒有基例,就無法停止并推出遞歸。就像照鏡子,如果沒有本身的人就無法獲得鏡子里的影像。 所以這就得出了遞歸的兩個特征:
(1)基例不需要遞歸
(2)遞歸式中必須有基例存在
2
階乘計算
首先把階乘當作一個普通的函數寫出來,這里要運用到fact()函數,這個函數的意義就是把自身引用到函數內部中去。此時的基例就是0,代碼如下
輸出結果如下
3
字符串反轉實例
算法最重要的是思維,有了遞歸的思想,字符串反轉這個簡單的實例也可以輕而易舉的用遞歸算法來實現啦!
實現反轉所運用到的函數就是reverse()函數。而這里的遞歸對象就是字符串,結合階乘,將字符串分成兩個部分,首字符和其他字符。代碼如下:
點擊運行后卻發現報錯了,這是為什么呢?錯誤提示說:代碼超過了最大遞歸深度1000層。這里的最大遞歸深度是程序為了防止遞歸無限錯誤而設計的。之前強調過基例的作用,而這里出現錯誤的原因就是因為沒有基例?;亲钚〉淖址拍?#xff0c;也就是“沒有字符”,在這里不輸入任何字符就可以了。
可以實現字符反轉的代碼如下:
4
總結
在遞歸算法中涉及到的知識點就是函數與代碼復用的知識點。其實編程的目的就是減輕人類的負擔,在程序設計的時候一定要多多思考,注意細節!
更多精彩文章:
答粉絲問|Python中模塊導入方法的比較
如何下載付費音樂
從1到100求和學算法思維(六)
開發|關于微信小游戲開發的入門心得
JAVA|關于同步和異步的區別
Web|如何實現導航欄的默認,預覽以及選中時的樣式
?where2go 團隊
微信號:算法與編程之美? ? ? ? ??
長按識別二維碼關注我們!
溫馨提示:點擊頁面右下角“寫留言”發表評論,期待您的參與!期待您的轉發!
總結
以上是生活随笔為你收集整理的求n的阶乘的算法框图_算法|从阶乘计算看递归算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机用语优秀怎么算,计算机专业用语
- 下一篇: 计算机学院运动会通讯稿,2021大学运动