[問題] 請問如何寫要巢狀迴圈要跑幾層

看板C_and_CPP作者 (Zcode)時間12年前 (2013/05/23 11:45), 編輯推噓3(306)
留言9則, 5人參與, 最新討論串1/1
問題(Question): 哈囉大家,不好意思打擾 小弟目前有遇到一個問題 就是我想要寫一段code,可以設定多層巢狀迴圈要跑幾層 例如以下程式碼,是跑了2層巢狀迴圈的code for (int i=1; i<=3 ;i++) for (int j=1; j<=i ;j++) cout << "[" << i << "," << j << "] "; 以下是跑了3層的code for (int i=1; i<=3 ;i++) for (int j=1; j<=i ;j++) for (int k=1; k<=j ;k++) cout << "[" << i << "," << j << "," << k << "] "; 我現在想要寫個general的函數,例如void general(int N) 可以根據引數N決定要跑幾層巢狀迴圈 我嘗試了兩、三天,試著用遞迴函數呼叫的方式去寫 不過都沒有成功 所以想請問大家,像這樣的問題,有沒有甚麼比較建議的寫法? 不用幫我寫只希望大家能給我一點寫法的建議就好,我再自己努力 (我所學非資訊相關背景,所以問的問題也許對大家來說太基本,還請見諒!) 萬分感謝!^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.113.225 ※ 編輯: Zcode 來自: 140.109.113.225 (05/23 19:49)

05/23 19:50, , 1F
的確是遞迴阿
05/23 19:50, 1F

05/23 20:27, , 2F
可以貼沒有成功的code 看看問題在哪
05/23 20:27, 2F
我的code void general(int N, int k) { for (int i=1; i<=N; i++) { if (k>=0) { general(i,k-1); } cout << i << "," ; } } k引數代表的是我希望加多幾層巢狀迴圈 general(3,2)的效果 目標要是 for (int i=1; i<=3 ;i++) for (int j=1; j<=i ;j++) for (int k=1; k<=j ;k++) cout << "[" << i << "," << j << "," << k << "] "; 的效果 也就是產生 [1,1,1] [2,1,1] [2,2,1] [2,2,2] [3,1,1] [3,2,1] [3,2,2] [3,3,1] [3,3,2] [3,3,3] 不過我的general函數還是沒弄好 正在仔細思考中 @@" ※ 編輯: Zcode 來自: 114.45.238.234 (05/23 22:18)

05/23 23:27, , 3F
到遞迴函數的底端再一次印三個數
05/23 23:27, 3F

05/24 00:30, , 4F
遞迴 傳三個參數 上限, 深度, 是否為第一層
05/24 00:30, 4F

05/24 01:06, , 5F
我錯了 那樣是寫不出來的
05/24 01:06, 5F

05/24 09:34, , 6F
上限、深度、要印的數字
05/24 09:34, 6F
弄了一整天,終於差不多完成了 @_@" 有種感動的感覺 但是還剩下最後一點,要把temp[3]改寫成temp[k+1]動態記憶體配置 但是我如果改成以下動態記憶體配置 int* temp; temp = new int[k+1]; 因為是遞迴呼叫的關係 每次遞迴一次都會重新指向一塊新的動態記憶體區塊,這樣就不對了 請問我要怎麼寫,才能產生「靜態的」動態記憶體區塊的效果呢? 萬分感謝!^^ void general(int N, int k) { const static int uplimit = k; // int* temp; // temp = new int[k+1]; static int temp[3]; ^ 最後一步,想要改寫成「靜態的」動態記憶體配置int[k+1] for (int i=1; i<=N ;i++) { int round = (uplimit - k + 1); temp[round-1] = i; if (round==3) { cout << "["; for (int i=0; i<3; i++) cout << temp[i] << ","; cout << "]"; } if (k>=0) { general(i, k-1); } } } ※ 編輯: Zcode 來自: 140.109.113.225 (05/24 17:40)

05/24 21:58, , 7F
用const static的話,要跑其它輸入就動不了了
05/24 21:58, 7F

05/24 22:02, , 8F
以原始程式為基礎改的 http://ideone.com/KkxbQq
05/24 22:02, 8F

05/25 17:34, , 9F
謝謝樓上! 這樣這問題大致算是完成了 萬分感謝!
05/25 17:34, 9F
文章代碼(AID): #1HdW57GA (C_and_CPP)