作者LPH66 (-858993460)
看板C_and_CPP
標題Re: [問題] 請問排列組合的遞迴呼叫次數計算
時間Thu May 5 01:56:32 2011
※ 引述《minimatsumi (sugar)》之銘言:
: 以下程式會算出 C(N, M),即從 N 個物品中選出 M 個物品的方法數量。
: 如果 count 的值原先為 0 ,請問計算 C(5, 3) 後,count 的值為何?
: unsigned int count = 0;
: unsigned int getC(unsigned int N, unsigned int M){
: count++;
: if (N == 0) return (N == M ? 1 : 0);
: else if (M == 0) return 1;
: else return getC(N-1, M) + getC(N-1, M-1); }
: 請問count值最後是多少
: (A) 5 (B) 15 (C) 51 (D) 63
: 我一直算出26耶~
: 有人答案給D
: 有人答案給C
: 所以答案到底是....?
M\N 0 1 2 3 4 5
0 1 1 1 1 1 1
↖ ↖ ↖ ↖ ↖
1 1 ← 3 ← 5 ← 7 ← 9 ← 11
↖ ↖ ↖ ↖ ↖
2 1 ← 3 ← 7 ← 13 ← 21 ← 31
↖ ↖ ↖ ↖ ↖
3 1 ← 3 ← 7 ← 15 ← 29 ←
51
這表是這樣來的:
首先 最左和最上是1這沒問題
其他的值則是它左上加上它左邊再加1
(因為 C(N,M) 呼叫了 C(N-1,M-1) 和 C(N-1,M)
再加上自己的一次)
因此答案是 51
如果這題問 C(5,5) 答案才會是 63 (再往下算兩行就知道了)
--
順帶一提, 這張表在 OEIS 有紀錄:
http://oeis.org/A131247/table
http://oeis.org/A131248/table (這兩個互為轉置)
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █
▄▄▄▄▄
▍
./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎
⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏
ζ(▏●‵◥′●▊)Ψ ▏ █
⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主義 █
▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢
S.O.S 世界を大いに盛り上げるための涼宮ハルヒの団
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.230.62
推 VictorTom:推:) 05/05 09:29
推 minimatsumi:原來我都忘記加到自己....只加了最下面那一層,謝謝您 05/05 23:47