[問題]用遞迴寫一個PowerSet,求解釋

看板Programming作者 ( *~鴨子~*)時間9年前 (2014/10/15 20:49), 編輯推噓0(0011)
留言11則, 3人參與, 最新討論串1/2 (看更多)
#include <iostream.h> char buf[3]={'a','b','c'}, ans[4]; int total_len=3; void Powerset(int i, int j) { if (j==total_len) { ans[i]=0; cout<<'{'<<ans<<'}'<<endl; } else { Powerset(i,j+1); ans[i]=buf[j]; Powerset(i+1,j+1); } } void main() { Powerset(0,0); } 上面是我在網路上找到的範例 看我看了好久還是無法看出他所要表達的意思 是否有高手可以幫我解釋一下 出處:http://www.programmer-club.com.tw/ShowSameTitleN/c/4166.html -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.233.78.242 ※ 文章網址: http://www.ptt.cc/bbs/Programming/M.1413377349.A.0A4.html

10/15 21:36, , 1F
用看的怎麼可能看出來。不要看就懂了。
10/15 21:36, 1F

10/15 22:18, , 2F
根據powerset定義 buf裡的元素都有兩
10/15 22:18, 2F

10/15 22:18, , 3F
種選擇 1.放入ans 2.不放入
10/15 22:18, 3F

10/15 22:20, , 4F
Powerset(i,j)的i給ans用 代表放入幾
10/15 22:20, 4F

10/15 22:20, , 5F
個 j給buf用 指向某元素
10/15 22:20, 5F

10/15 22:20, , 6F
所以當呼叫Powerset(i,j)時 需要兩個
10/15 22:20, 6F

10/15 22:21, , 7F
遞迴呼叫 1.不放入當前元素 繼續往下
10/15 22:21, 7F

10/15 22:21, , 8F
也就是Powerset(i,j+1)
10/15 22:21, 8F

10/15 22:21, , 9F
2.放入當前元素 繼續往下 也就是
10/15 22:21, 9F

10/15 22:22, , 10F
ans[i]=buf[j];與Powerset(i+1,j+1);
10/15 22:22, 10F

10/16 16:20, , 11F
我似乎有點了解了!!
10/16 16:20, 11F
文章代碼(AID): #1KFcr52a (Programming)
文章代碼(AID): #1KFcr52a (Programming)