Re: [問題] 請問排列組合的遞迴呼叫次數計算

看板C_and_CPP作者 (-858993460)時間14年前 (2011/05/05 01:56), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

05/05 09:29, , 1F
推:)
05/05 09:29, 1F

05/05 23:47, , 2F
原來我都忘記加到自己....只加了最下面那一層,謝謝您
05/05 23:47, 2F
文章代碼(AID): #1DmPDIEW (C_and_CPP)
文章代碼(AID): #1DmPDIEW (C_and_CPP)