基于JS遞歸函數(shù)細化認識及實用實例(推薦)
程序調用自身的編程技巧稱為遞歸( recursion)。
一個過程或函數(shù)在其定義或說明中又直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序往往十分簡潔易懂。
一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。
注意:
(1) 遞歸就是在過程或函數(shù)里調用自身;
(2) 在使用遞增歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口,否則將無限進行下去(死鎖)。
遞歸算法一般用于解決三類問題:
(1)數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci函數(shù))
(2)問題解法按遞歸算法實現(xiàn)。(回溯)
(3)數(shù)據(jù)的結構形式是按遞歸定義的。(樹的遍歷,圖的搜索)
遞歸的缺點:
遞歸算法解題的運行效率較低。在遞歸調用的過程當中系統(tǒng)為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等。
遞歸函數(shù)趣味實例:
1、 古典問題——有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問第三年每個月的兔子總數(shù)為多少?(提示:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21....)
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine(p.tuzi(7)); } public int tuzi(int n) { if (n == 1 || n == 2) { return 1; } else { return tuzi(n - 1) + tuzi(n - 2); } } }
2、 趣味問題——年齡。有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?用遞歸算法實現(xiàn)。
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine( p.age(5)); } /// <summary> /// 遞歸法求歲數(shù) /// </summary> /// <param name="n">有幾個人</param> /// <returns></returns> int age(int n) { int c; if(n==1) return 10; else { c = age(n-1)+2; return c; } }
3、 趣味問題——猴子吃桃。海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據(jù)分為五份,多了一個,這只猴子把多的一個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子?
代碼:
class Program { static void Main(string[] args) { Program p = new Program(); Console.WriteLine( p.PeachNumber(5)); } /// <summary> /// 遞歸法求桃子數(shù) /// </summary> /// <param name="n"></param> /// <returns></returns> int PeachNumber(int n) { if (n == 1) { //最后一個是至少是六個 return 6; } else { return (PeachNumber(n - 1) + 1) * 5; } }
以上這篇基于JS遞歸函數(shù)細化認識及實用實例(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- JavaScript遞歸函數(shù)定義與用法實例分析
- PHP自定義遞歸函數(shù)實現(xiàn)數(shù)組轉JSON功能【支持GBK編碼】
- JavaScript遞歸函數(shù)解“漢諾塔”算法代碼解析
- JavaScript正則表達式校驗與遞歸函數(shù)實際應用實例解析
- JS中遞歸函數(shù)
- javascript中遞歸函數(shù)用法注意點
- javascript實現(xiàn)網頁子頁面遍歷回調的方法(涉及 window.frames、遞歸函數(shù)、函數(shù)上下文)
- js中遞歸函數(shù)的使用介紹
- javascript 用記憶函數(shù)快速計算遞歸函數(shù)
- javascript遞歸函數(shù)定義和用法示例分析
相關文章
Javascript 拖拽的一些簡單的應用(逐行分析代碼,讓你輕松了拖拽的原理)
這篇文章主要介紹了Javascript 拖拽的一些簡單的應用(逐行分析代碼,讓你輕松了拖拽的原理),需要的朋友可以參考下2015-01-01動態(tài)的綁定事件addEventListener方法的使用
本文為大家介紹下動態(tài)的綁定事件的方法addEventListener的使用示例,不了解的朋友可以參考下2014-01-01