遞迴演算法:
直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。使用遞迴技術往往使函式的定義和演算法的描述簡捷且易於理解。
特點:
(1) 遞迴就是在過程或函式裡呼叫自身。
(2) 在使用遞迴策略時,必須有乙個明確的遞迴結束條件,稱為遞迴出口。
(3) 遞迴演算法解題通常顯得很簡潔,但遞迴演算法解題的執行效率較低。所以一般不提倡用遞迴演算法設計程式。
(4) 在遞迴呼叫
的過程當中系統為每一層的返回點、區域性量等開闢了棧來儲存。遞迴次數過多容易造成棧溢位
等。所以一般不提倡用遞迴演算法設計程式。 一、
是每次呼叫在規模上都有所縮小(通常是減半);
二、是相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入);
三、是在問題的規模極小時必須用直接給出解答而不再進行遞迴呼叫,因而每次遞迴呼叫都是有條件的(以規模未達到直接解答的大小為條件),無條件遞迴呼叫將會成為死迴圈而不能正常結束。
如何設計遞迴演算法
1.確定遞迴公式
2.確定邊界(終了)條件
列子:
(1). 階乘函式
階乘函式可遞迴的定義為
n=0時, n! = 1
n>0時,n! = n(n-1)!
遞迴式的第一式給出了這個函式 的初始值,是非遞迴地定義的。每個遞迴函式都必須有非遞迴的初始值,否則,遞迴函式就無法計算。遞迴式的第二式用較小的函式值來表示較大自變數的函式值的方式來定義n 的階乘。第一式的左右兩邊都引用了階乘記號,是乙個遞迴定義式,可遞迴的計算如下:
int factorial(int n)
(2). fibonacci 數列
無窮數列1,1,2,3,5,8,13,21,34,55.........,稱為fibonacci 數列。它可以遞迴的定義為
這是乙個遞迴關係式,它說明當n>1 時,這個數列的第n項的值是它前面兩項之和。它用兩個較小的自變數的函式值來定義乙個較大自變數的函式值,所以需要兩個初始值f(0)和f(1)。
第n個fibonacci 數可遞迴的計算如下:
int fibonacci(int n)
演算法分析與設計 遞迴與分治策略
直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。在計算機演算法設計與分析中,使用遞迴技術往往使函式的定義和演算法的描述簡潔且易於理解。例1 階乘函式 可遞迴地定義為 其中 n 0 時,n 1為邊界條件 n 0 時,n n n 1 為遞迴方程 邊界條件與遞迴方程是遞迴...
遞迴下降分析程式設計 演算法講解之遞迴演算法
前面已經介紹了關於遞迴呼叫這樣一種操作,而遞迴程式設計是c 語言程式設計中的一種重要的方法,它使許多複雜的問題變得簡單,容易解決了。遞迴特點是 函式或過程呼叫它自己本身。其中直接呼叫自己稱為直接遞迴,而將a呼叫b,b以呼叫a的遞迴叫做間接遞迴。例1 給定n n 1 用遞迴的方法計算1 2 3 4 n...
遞迴演算法與分治策略
關於遞迴的學習 1 遞迴演算法的基本思想是 把規模大的 較難解決的問題變成規模較小的的問題。規模較小的問題又變成規模更小的問題,並且小到一定程度可以直接得出它的解,從而得到原來問題的解。遞迴是一種直接或間接呼叫自身的函式的一種演算法,很常用,一般用於解決三類問題 資料的定義按遞迴定義的。fibona...