這個問題似乎很有趣, 所以我也來試作看看, 用遞迥來實作時, 我考慮到以下兩點
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