国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

基于JS遞歸函數細化認識及實用實例(推薦)

2024-05-06 15:13:20
字體:
來源:轉載
供稿:網友

程序調用自身的編程技巧稱為遞歸( recursion)。

一個過程或函數在其定義或說明中又直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復計算,大大地減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序往往十分簡潔易懂。

一般來說,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

注意:

(1) 遞歸就是在過程或函數里調用自身;

(2) 在使用遞增歸策略時,必須有一個明確的遞歸結束條件,稱為遞歸出口,否則將無限進行下去(死鎖)。

遞歸算法一般用于解決三類問題:

(1)數據的定義是按遞歸定義的。(Fibonacci函數)

(2)問題解法按遞歸算法實現。(回溯)

(3)數據的結構形式是按遞歸定義的。(樹的遍歷,圖的搜索)

遞歸的缺點:

遞歸算法解題的運行效率較低。在遞歸調用的過程當中系統為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數過多容易造成棧溢出等。

遞歸函數趣味實例:

1、 古典問題——有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問第三年每個月的兔子總數為多少?(提示:兔子的規律為數列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個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大?用遞歸算法實現。

class Program {  static void Main(string[] args)  {   Program p = new Program();      Console.WriteLine( p.age(5));  }  /// <summary>  /// 遞歸法求歲數  /// </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、 趣味問題——猴子吃桃。海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據分為五份,多了一個,這只猴子把多的一個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 嘉黎县| 罗甸县| 江孜县| 和静县| 杭州市| 克山县| 乃东县| 台安县| 株洲县| 同心县| 秀山| 漠河县| 连城县| 聊城市| 绥滨县| 英超| 霍城县| 西乡县| 增城市| 宝清县| 利川市| 阜宁县| 金阳县| 泊头市| 洪湖市| 沾益县| 手游| 阿尔山市| 金山区| 团风县| 普宁市| 崇左市| 冷水江市| 陕西省| 浠水县| 辰溪县| 云南省| 平顺县| 洛扎县| 乌兰县| 齐齐哈尔市|