使用遞迴的方法,主程式部分看怎麼使用就可以了~重點是遞迴的函式~
另外,我假設最內圈的運算是把所有迴圈的變數加起來 i + j + k + ...
實際上看你的應用要怎麼改,然後var_array存放的方式是
var_array[0]存放最內層的變數,依序越來越外層,最外層放在[depth_total-1]
void loop( int start, //迴圈起點
int end, //迴圈終點
int depth_now, //目前深度
int depth_total, //整體深度
int *p_sum, //運算結果
int *var_array //傳遞迴圈變數
)
{
//迴圈內的動作,使用depth_total知道var_array多大
if (!depth_now)
for(int i=0; i<depth_total; i++)
(*p_sum) += var_array[i];
//使用var_array傳遞迴圈變數
else
for (var_array[depth_now-1] = start;
var_array[depth_now-1] < end;
var_array[depth_now-1]++)
loop( var_array[depth_now-1], //下層迴圈起點
end, //下層迴圈終點
depth_now-1, //下層迴圈深度
depth_total, //整體深度
p_sum, //運算結果
var_array //傳遞迴圈變數
);
}
//主程式部分
void main()
{
int i, j, k, sum, depth;
int *var;
int loop_end = 10;
//計算
depth = 1;
sum = 0;
var = new int[depth];
loop(0,loop_end,depth,depth,&sum,var);
delete []var;
printf("test 1 loop, sum = %d\n",sum);
depth = 2;
sum = 0;
var = new int[depth];
loop(0,loop_end,depth,depth,&sum,var);
delete []var;
printf("test 2 loop, sum = %d\n",sum);
depth = 3;
sum = 0;
var = new int[depth];
loop(0,loop_end,depth,depth,&sum,var);
delete []var;
printf("test 3 loop, sum = %d\n",sum);
//驗證
for(i=0,sum=0; i<loop_end; i++)
sum += i;
printf("result 1 loop, sum = %d\n",sum);
for(i=0,sum=0; i<loop_end; i++)
for(j=i; j<loop_end; j++)
sum += i + j;
printf("result 2 loop, sum = %d\n",sum);
for(i=0,sum=0; i<loop_end; i++)
for(j=i; j<loop_end; j++)
for(k=j; k<loop_end; k++)
sum += i + j + k;
printf("result 3 loop, sum = %d\n",sum);
}
※ 引述《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: 118.169.51.24
※ 編輯: pizza0117 來自: 118.169.51.24 (10/29 12:49)