關於JS遞迴函式細化認識及實用執行個體

來源:互聯網
上載者:User

標籤:sdn   new   十分   replace   href   details   猴子吃桃   structure   否則   

程式調用自身的編程技巧稱為遞迴( 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、  趣味問題——猴子吃桃。海灘上有一堆桃子,五隻猴子來分。第一隻猴子把這堆桃子憑據分為五份,多了一個,這隻猴子把多的一個扔入海中,拿走了一份。第二隻猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,第三、第四、第五隻猴子都是這樣做的,問海灘上原來最少有多少個桃子?

代碼:

class Program
    {
        static void Main(string[] args)
        {
           
            Program p = new Program();
           
            Console.WriteLine(  p.PeachNumber(5));
        
        }
        /// <summary>
        /// 遞迴法求桃子數
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        int PeachNumber(int n)
        {
            if (n == 1)
            {
                //最後一個是至少是六個
                return 6;
            }
            else
            {
                return (PeachNumber(n - 1) + 1) * 5;
            }
        }

關於JS遞迴函式細化認識及實用執行個體

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.