顯示廣告
隱藏 ✕
看板 Programming
作者 SmallBee(蜜蜂貓)
標題 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
※ 看板: Programming 文章推薦值: 2 目前人氣: 0 累積人氣: 447 
( ̄︶ ̄)b abc1231qa 說讚!
1樓 時間: 2010-06-13 10:06:27 (台灣)
  06-13 10:06 TW
= =  還有出題時間哦……
感覺你好像是老師    程式老師
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的條件

老師 這樣對嗎 ^^"
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇