看板 C_and_CPP 關於我們 聯絡資訊
這個問題似乎很有趣, 所以我也來試作看看, 用遞迥來實作時, 我考慮到以下兩點 1. 執行的順序是否正確? 2. 最內圈的是否能讀取所有外圈的變數? 因此, 最內圈的敘述, 我是以印出各個變數的值(a, b, c, ...), 由各變數的值來 驗證上述兩點的正確性. ---------------------------------------------------------------------- #include <stdio.h> int max = 4; void depth_loop(int level, int start, int *vars) { if (level == 0) { /* 在這裡寫最內圈要做的事 */ printf("(a, b, c)=(%3d,%3d,%3d)\n", vars[2], vars[1], vars[0]); return; } level--; for (vars[level] = start; vars[level] < max; vars[level]++) { depth_loop(level, vars[level], vars); } } int main() { int vars[3] = { 0, 0, 0 }; depth_loop(3, 0, vars); return 0; } ----------------------------------------------------------------------- 執行結果如下: (a, b, c)=( 0, 0, 0) (a, b, c)=( 0, 0, 1) (a, b, c)=( 0, 0, 2) (a, b, c)=( 0, 0, 3) (a, b, c)=( 0, 1, 1) (a, b, c)=( 0, 1, 2) (a, b, c)=( 0, 1, 3) (a, b, c)=( 0, 2, 2) (a, b, c)=( 0, 2, 3) (a, b, c)=( 0, 3, 3) (a, b, c)=( 1, 1, 1) (a, b, c)=( 1, 1, 2) (a, b, c)=( 1, 1, 3) (a, b, c)=( 1, 2, 2) (a, b, c)=( 1, 2, 3) (a, b, c)=( 1, 3, 3) (a, b, c)=( 2, 2, 2) (a, b, c)=( 2, 2, 3) (a, b, c)=( 2, 3, 3) (a, b, c)=( 3, 3, 3) ----------------------------------------------------------------- 用以下的程式碼驗證後, 結果一致 int main() { int a, b, c; for (a = 0; a < max; a++) { for (b = a; b < max; b++) { for (c = b; c < max; c++) { printf("(a, b, c)=(%3d,%3d,%3d)\n", a, b, c); } } } } ※ 引述《liwmewmew (如果大海能夠)》之銘言: : 其實這個問題問在C++板有點不太對 : 這好像比較偏演算法了? : 今天在思考一個問題 : 我們也許都曾看過這樣的深層loop : for(a = 0; a < max; a++) : for(b = a; b < max; b++) : for(c = b; c < max; c++){ : } : 這是三層的loop,如果今天我想寫成動態的,該怎麼寫呢? : 例如我輸入3,那他就會跑3層 : 我輸入4,他就跑4層,規則同上 : 我想一個晚上,沒想出來~"~ : 不知道是不是我的思考卡住了,還是這種程式寫不出來? : 謝謝大家~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.207.134