(一)遞迴程式設計方法的要點
1) 對於含有遞迴特徵的問題,最好設計遞迴形式的演算法。但也不要單純追求形式。應在演算法設計的分析過程中「就事論事」。例如,在利用分割求解設計演算法時,子問題和原問題的性質相同;或者,問題的當前一步解決之後,餘下的問題和原問題性質相同,則自然導致遞迴求解。
2) 實現遞迴函式,目前必須利用「棧」。乙個遞迴函式必定能改寫為利用棧實現的非遞迴函式,反之,乙個利用棧實現的非遞迴函式可以改寫為遞迴函式。需要注意的是遞迴函式遞迴層次的深度決定所需儲存量的大小。
3) 分析遞迴演算法的工具是遞迴樹,從遞迴樹上可以得到遞迴函式的各種相關資訊。例如:遞迴樹的深度即為遞迴函式的遞迴深度;遞迴樹上的結點數目恰為函式中的主要操作重複進行的次數;若遞迴樹蛻化為單支樹或者遞迴樹中含有很多相同的結點,則錶該遞迴函式不適用。
4) 遞迴函式中的尾遞迴都是可以容易消除的。
5) 遞迴函式一定要有乙個遞迴出口。即整個遞迴函式應該是收斂的。規模應該越來越小。
(示例分析一)斐波那契數列
有如下的數列:1、1、2、3、5、8、13、21、34、…(n>=1)
得到如下的遞推關係式:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>=2,n∈n*)
f(2)=f(1)+f(0)=1+0=1
f(3)=f(2)+f(1)=1+1=2
f(4)=f(3)+f(2)=2+1=3
f(5)的遞迴樹如下
遞迴程式設計方法練習 遞迴輸出單鏈表
6 2 遞迴程式設計方法練習 遞迴輸出單鏈表 10 分 本題要求用遞迴方法編寫遞迴函式實現無頭結點單鏈表的輸出操作函式。l是乙個不帶頭結點的單鏈表,函式void listprint l rec linklist l 要求用遞迴的方法輸出無頭結點之單鏈表中各個元素的值,每個元素的前面都有乙個空格 包括...
c 程式設計 遞迴程式設計
實現遞迴程式設計的方法,需要三步 第2和第3可以同時思考 明確函式作用是什麼 遞迴的條件表示式 遞迴結束的條件 用三個具體的例子做具體分析 q1 函式作用是什麼?計算n的階乘,返回結果 確定函式及返回值 long long factorial int n q2 遞迴的條件表示式 factorial ...
遞迴思想與遞迴程式設計
今天來談談遞迴程式設計,我想參與過程式設計經歷的,或者學過程式設計的都應該了解遞迴,遞迴思想在解決一些問題上顯得尤為方便,能發出意想不到的效果,但是遞迴程式設計顯然難度比較大,沒有非常豐富的程式設計經驗或者對遞迴有過很深的理解,不能隨手就寫出遞迴的 所以今天就來談談遞迴怎麼用?遞迴的程式設計模式就是...