看板 C_and_CPP 關於我們 聯絡資訊
使用遞迴的方法,主程式部分看怎麼使用就可以了~重點是遞迴的函式~ 另外,我假設最內圈的運算是把所有迴圈的變數加起來 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)
pizza0117:迴圈和遞迴兩種 http://nopaste.csie.org/c9fad 10/29 14:41