[問題] 關於組合的演算法...(考慮溢位)

看板C_and_CPP (C/C++)作者 (Alfred)時間14年前 (2012/04/28 21:07), 編輯推噓5(5011)
留言16則, 8人參與, 最新討論串2/2 (看更多)
原來可以用帕斯卡...= =(數學不好) 以下是用C(m,n) = C(m-1,n) + C(m-1,n-1) 實作遞迴程式 ------------------------------------------------ #include<iostream> using namespace std; int Pascal(int, int); int main(void){ int m, n, sum = 1; cout << "Enter C(m,n) \nm = "; cin >> m; cout << "n = "; cin >> n; cout << Pascal(m,n); system("pause"); return 0; } int Pascal(int a, int b) { int c = b; if(b == 1 || (a - b) == 1) return a; else if((a - b) == 2) return ( (a * (a - 1)) / 2);// *** else if((a - b) == 3) return ( (a * (a - 1) * (a - 2)) / 6);// *** else if(a == b) return 1; return Pascal(a - 1,b - 1) + Pascal(a - 1,c); } ------------------------------------------------- 註解有"***"的條件只是避免產生太多小function 基本認為C(x,2) c(x,3)直接成還算可接受的範圍 目前遇到的問題是 執行還是太慢= = 可能是遞迴一直call function的關係 還有別的辦法嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.230.113.18

04/28 21:27, , 1F
if-else if 會不會比較好一點?
04/28 21:27, 1F
※ 編輯: skywillnosky 來自: 125.230.113.18 (04/28 21:43)

04/28 21:44, , 2F
感謝指正
04/28 21:44, 2F

04/28 21:48, , 3F
存起來+迴圈生成
04/28 21:48, 3F

04/28 22:14, , 4F
兩個 for loop 就可以搞定,殺雞何必用牛刀?
04/28 22:14, 4F

04/28 22:16, , 5F
是說"***"的地方嗎?
04/28 22:16, 5F

04/28 22:39, , 6F
樓樓上中肯 遞迴很貴耶 www 我都不敢用
04/28 22:39, 6F

04/29 03:40, , 7F
最後一個else if用else就好,以防例外狀況發生,有比較快一點嗎?
04/29 03:40, 7F

04/29 03:47, , 8F
else
04/29 03:47, 8F

04/29 03:48, , 9F
return Pascal(a - 1,b - 1) + Pascal(a - 1,c);
04/29 03:48, 9F

04/29 03:56, , 10F
可能差不了多少,最壞的情況是一直比較到最後,應該沒有比較省
04/29 03:56, 10F

04/29 03:59, , 11F
如果比較care效能,樓上說的用非遞迴方式會比較好...^^
04/29 03:59, 11F

04/29 06:53, , 12F
就算不開陣列,也用個map吧,重複算的部分太多了。
04/29 06:53, 12F

04/30 04:04, , 13F
我想請問你為什麼刪除 james732 的推文?
04/30 04:04, 13F

04/30 04:06, , 14F
板主沒提我都忘記自己有推過這篇文章了XD
04/30 04:06, 14F

04/30 04:07, , 15F
記得我是提醒他標題不要空白,所以也覺得還好
04/30 04:07, 15F

04/30 04:08, , 16F
嗯嗯 @@
04/30 04:08, 16F
文章代碼(AID): #1Fc-kfyi (C_and_CPP)
文章代碼(AID): #1Fc-kfyi (C_and_CPP)