演算法::遞迴

來源:互聯網
上載者:User

按我理解,遞迴就是不停地調用自身,到一定的臨界條件後得出結果。


按照百度的說法,

遞迴一般用於解決三類問題:

  (1)資料的定義是按遞迴定義的。(Fibonacci函數)

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

  (3)資料的結構形式是按遞迴定義的。(樹的遍曆,圖的搜尋)


遞迴的缺點:

  遞迴演算法解題相對常用的演算法如普通迴圈等,運行效率較低。因此,應該盡量避免使用遞迴,除非沒有更好的演算法或者某種特定情況,遞迴更為適合的時候。在遞迴調用的過程當中系統為每一層的返回點、局部量等開闢了棧來儲存。遞迴次數過多容易造成棧溢出等。


如何設計遞迴演算法

  1.確定遞迴公式

  2.確定邊界(終了)條件


計算n!

#include <stdio.h>long factorial(long n){ if (n == 0 || n == 1)  return 1; else  return n * factorial(n-1);}int main(void){ int n = 0, i = 0; long sum = 0; printf("Please input a number: \n"); scanf("%d", &n); printf("%d! = %lu\n", n, factorial(n)); return 0;}

我看到過的其中的一條面試題:

樓梯有n階台階,上樓可以一步上1階,也可以一步上2階,編一程式計算共有多少種不同的走法.

如果只有1個台階,只有1一種走法。

如果有2個台階,就有11和2兩種走法。

如果有3個台階,有111,12和21三種走法。

如果有4個台階,有1111,112,121,211,22五種走法。

如果有5個台階,有11111,1112,1121,1211,2111,122,212,221八種走法。

這個與斐波那契(Fibonacci)數列有關,斐波那契—盧卡斯遞推:f(1)=1,f(2)=2,從第三項開始,每一項都等於前兩項之和f(n)
= f(n-1)+ f(n-2)(當n>2)。

所以

 
1         n=1 
f(n)={ 2       n=2
     f(n-1)+f(n-2) n>2

int f(int n){    if (n == 1 || n == 2)        return n;    return f(n-1) + f(n-2);    }


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.