遞迴演算法
1、乙個人趕著鴨子去每個村莊賣,每經過乙個村子賣去所趕鴨子的一半又乙隻。這樣他經過了七個村子後還剩兩隻鴨子,問他出發時共趕多少只鴨子?經過每個村子賣出多少只鴨子?
題目分析:
遞迴終止的條件是到第7個村莊時遞迴停止
演算法構造
:定義遞迴函式f(n), 當 n=8時
,剩餘2只鴨子,;當 0時
,總共趕num =(f(n+1)+1)*2只鴨子,賣出num/2+1只鴨子
程式**
://題目:遞迴演算法解決賣鴨子問題
//作者 :軟工1508010206 白瑜
//時間 : 2017/05/20
#include int f(int n)
else
return num;
} int main()
執行結果截圖:
2、角谷定理。輸入乙個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算後,總可以得到自然數值1。求經過多少次可得到自然數1
題目分析
:遞迴的終止條件是最後值為1;先對輸入的數n 進行判斷,若 n = 1,則輸出1;若輸入的數為偶數, 則把它除以2;若為奇數則乘3加1;直到n = 1為止;
演算法構造:
n=1 時, 輸出1;若n%2==0(n為偶數)時,n = n/2;若n%2==1(n為奇數)時,n = 3*n+1
程式**:
//題目:遞迴演算法之角谷定理
//作者 :軟工1508010206 白瑜
//時間 : 2017/05/20
#includeint jg(int n,int step) //定義遞迴函式,引數為數字和步驟數
else if (n % 2 == 1)
return jg(n, step + 1);
} else
printf("\nstep=%d\n",step);//輸出步驟數
} //主函式
int main()
執行結果截圖:
3.**號碼對應的字元組合:在**或者手機上,乙個數字如2對應著字母abc,7對應著pqrs。那麼數字串27所對應的字元的可能組合就有3*4=12種(如ap,br等)。現在輸入乙個3到11位長的**號碼,請列印出這個**號碼所對應的字元的所有可能組合和組合數。 題目
分析:在這裡,遞迴出口是,當輸入的是乙個數字時,返回這個數字所有可能性的組合,遞迴體是當輸入一串數字,每個數字代表不同的字串,返回最後乙個數字跟前面已產生的字串進行組合
演算法構造
:首先建乙個陣列,用來存放每個數字代表的字串組合,然後再建乙個陣列,用來存放每個字串的長度
程式**:
//題目:遞迴演算法解決**號碼對應的字元組合的
問題//作者 :軟工1508010206 白瑜
//時間 : 2017/05/20
#includeusing namespace std;
char* letter[10]=;
int num[10]=;
char input[15];
char output[15];
void sl(int t,int length)
else
}for(i=0;i<6;i++) {
cout<
執行結果截圖:
5.經驗歸納
遞迴是一種程式設計方法,更恰當的說是一
種技巧。既然是技巧就會有一些問題,那就是當用得合適時,會有事半功倍的效果,但大多數情況下這種技巧是不適合的。遞迴程式相比於一般的迭代程式會有更多的程式開銷,所以在使用遞迴前要衡量好簡化**和增加開銷之間的關係。
經過這幾個遞迴例題,我認為要寫好乙個遞迴演算法,主要把握以下幾點:首先要從題目中提取出重複的邏輯,這個邏輯需要乙個框架保證其可以遞迴執行,其次就是控制邏輯邊界,保證程式在正確的框架下執行,最後就是合適的退出遞迴,遞迴的退出往往和邏輯邊界相輔相成,掌握了以上幾點,可以讓我們在遞迴演算法中少走很多彎路,從而使得程式更加簡單方便。
python遞迴實現 遞迴演算法 python實現
在函式的定義中對這個函式自身的呼叫,就是遞迴。遞迴結構中,遞迴的部分必須比原來的整體簡單,才有可能到達某種終結點 出口 而且必須存在非遞迴的基本結構構成的部分,否則會無限遞迴。學習目標 程式設計實現斐波那契數列求值 f n f n 1 f n 2 程式設計實現求階乘 n 程式設計實現一組資料集合的全...
python實現遞迴演算法
usr bin env python coding utf 8 def recursive 1 n 樓梯有n階台階,上樓可以一步上3階,也可以一步上5階,計算共有多少種不同的走法?設n階台階的走法數為f n 如果台階數小於等於3,走法有2種 一步上3個台階或者5個台階 即f n 3 2 如果台階數為...
Python 實現遞迴演算法
1 遞迴的定義 遞迴就是子程式 或函式 直接呼叫自己或通過一系列呼叫語句間接呼叫自己,是一種描述問題和解決問題的基本方法。遞迴常與分治思想同時使用,能產生許多高校的演算法。遞迴常用來解決結構相似的問題。所謂結構相似,是指構成原問題的子問題與原問題在結構上相似,可以用類似的方法解決。具體地,整個問題的...