看板 Programming
作者 標題 Re: [請益] 用遞迴實作巢狀迴圈
時間 2010年06月13日 Sun. AM 04:43:01
※ 引述《abc1231qa》之銘言:
> 這是我寫的function show只是輸出 func的三個變數是從多少開始倒數
> EX: 321的話 會跑
> 3 2 1
> 3 2 0
> 3 1 1
> 3 1 0
> 3 0 1
> 3 0 0
> 2 2 1
> 2 2 0
> 2 1 0
你是要「用遞迴實作」巢狀迴圈
還是只是要上面這樣的效果?
因為...你這樣的東西根本不需要遞迴
我把func整個重寫, 因為光是宣告就不能這樣宣告了
另外...我只是用看得懂得語法寫,沒有特別是C語言
==================================程式開始==================================
define VALUES 3;
int ValueMax[VALUES]={1,2,3};
//每階的最大值
int Value[VALUES]={1,2,3};
//開始值
int ValueMin[VALUES]={0,0,0};
//每階的最小值
int ValueEnd[VALUES]={0,1,2};
//結束值
/*
Value跟ValueMax必須為項目數相同之1維矩陣
Value的初始值任一項皆需在Max~Min的範圍內(雖然不會出錯)
程式只實作減法
*/
function go() {
int i;
while (1) {
show();
//顯示
for(i=0;i<=VALUES;i++) if(Value[i]!=ValueEnd[i]) break;
//結束檢出
if(i>VALUES) return;
Value[0]--;
//減1
for(i=0;i<VALUES;i++) {
//借位檢出與處理
if(Value[i]<ValueMin[i]) {
Value[i]=ValueMax[i];
Value[i+1]--;
}
}
}
}
==================================程式結束==================================
就這樣....
如果要改成加法的話, 也不需要太大的修訂
沒有階數的上限,不需要任何遞迴或是堆疊
另外...有些程式語言可以直接比較兩個矩陣是否完全相等,可以拿來替代迴圈式的結束檢出
==================================出題時間==================================
問一:為何i>VALUES時可以return?它利用了for迴圈的哪種機制?
問二:現有的結束檢出在某種狀態下會陷入無法結束的無窮迴圈,請簡述原因跟解決方法
--
※ 來源: DISP BBS 看板: Programming 文章連結: http://disp.cc/b/33-39g
※ 作者: SmallBee 來自: 122.116.180.163 時間: 2010-06-13 04:43:01
※ 編輯: SmallBee 來自: 122.116.180.163 時間: 2010-06-13 05:08:21
※ 同主題文章:
06-13 02:30 □ [請益] 用遞迴實作巢狀迴圈
● 06-13 04:43 Re [請益] 用遞迴實作巢狀迴圈
06-13 23:28 Re [請益] 用遞迴實作巢狀迴圈
06-14 01:57 Re [請益] 用遞迴實作巢狀迴圈
06-21 21:06 Re [請益] 用遞迴實作巢狀迴圈
10-23 18:48 Re [請益] 用遞迴實作巢狀迴圈
※ 看板: Programming 文章推薦值: 2 目前人氣: 0 累積人氣: 447
( ̄︶ ̄)b abc1231qa 說讚!
2樓 時間: 2010-06-13 11:36:53 (台灣)
推
06-13 11:36 TW
研究中 然後我只貼了我code的一部分 可能造成我宣告有問題的誤解..... ps那是C++沒錯 一個全域變數temp 兩個function
3樓 時間: 2010-06-13 13:01:25 (台灣)
→
06-13 13:01 TW
問一:是for會自己多做一次? 問二:如果Value[i]的值一開始就比ValueEnd[i]的值還小 將永遠達不到End的條件 老師 這樣對嗎 ^^"
回列表(←)
分享