[問題] 新手遞回問題

看板C_and_CPP (C/C++)作者 (還是朋友?)時間14年前 (2011/08/11 23:52), 編輯推噓2(2024)
留言26則, 4人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) dev-c 問題(Question): 之前的函式我也是丟二維陣列進去做計算 執行是可以的 這次丟進去要來算一起算遞回就掛了 invalid initialization of reference of type 'int (&)[24][24]' from expression of type 'int[((unsigned int)((int)w))][((unsigned int)((int)h))]' 出現這樣的錯誤 若指定24 會過所以以上先不管 不過遞回 會出現 現在主要問題是想讓陣列 能一值丟入遞回內 但好像會跟上面的...問題一樣 程式碼(Code):(請善用置底文網頁, 記得排版) void RSAT(int x,int y,int (&gray)[24][24]); int main () { int gray[w][h],i,j; for(j=0;j<4;j++) { for(i=0;i<4;i++) { cout<<gray[i][j]<<"座標"<<i<<j<<":"; RSAT(i,j,sa); //編譯器一值是說這行錯誤 } } } void RSAT(int x,int y,int (&gray)[24][24]) { int sum=0; if (x==0&&y==0) { sum=gray[x][y]; } else if(y==0) { sum==gray[x][y] } else if(x<0) { sum=RSAT(0,y-1,gray)+ RSAT(x+1,y-1,gray)-RSAT(x,y-2,gray); } else { sum=RSAT(x-1,y-1,gray)+ RSAT(x+1,y-1,gray)-RSAT(x,y-2,gray) ; } cout<<sum<<endl; } 補充說明(Supplement): gray[w][h] 是有先崇bmp內讀取到w h 都是24 然後有先用迴圈 把各值放入 gray內了 希望不會又是...我笨蛋搞錯啥東西了QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.109.77 ※ 編輯: pigcat1315 來自: 114.34.109.77 (08/11 23:53)

08/11 23:56, , 1F
呃 函式期望一個 500x500 的陣列 你給他 6x6 是...?
08/11 23:56, 1F

08/11 23:58, , 2F
我原本設定 一樣大@@ 可是也是一 樣
08/11 23:58, 2F

08/12 00:00, , 3F
我在改成原版的好了 等等
08/12 00:00, 3F
※ 編輯: pigcat1315 來自: 114.34.109.77 (08/12 00:05) ※ 編輯: pigcat1315 來自: 114.34.109.77 (08/12 00:06)

08/12 00:15, , 4F
如果是另外宣告 就可以 但如果用找到的w h 就不行
08/12 00:15, 4F
※ 編輯: pigcat1315 來自: 114.34.109.77 (08/12 00:24)

08/12 00:24, , 5F
因為函式要的是固定的 24x24 所以只有固定 24x24 的才可以
08/12 00:24, 5F

08/12 00:24, , 6F
其他統統不行
08/12 00:24, 6F

08/12 00:26, , 7F
恩 有暫時先更改成固定的 剩遞回部份><"
08/12 00:26, 7F

08/12 00:29, , 8F
這樣遞回內也沒法 直接把陣列往下丟摟?
08/12 00:29, 8F

08/12 00:41, , 9F
嗯...請問你讓遞迴程式不傳回值,卻要把遞迴呼叫的結果相加,
08/12 00:41, 9F

08/12 00:41, , 10F
是打算幹什麼呀?
08/12 00:41, 10F

08/12 00:54, , 11F
我要算Rotated Summed Area Table 值
08/12 00:54, 11F

08/12 00:59, , 12F
我記得陣列給個負索引值,是往前找到別的變數去
08/12 00:59, 12F

08/12 01:08, , 13F
負索引值?
08/12 01:08, 13F

08/12 01:35, , 14F
對啊,你RSAT第一個判斷不是說y<0嗎,負索引值,就是往前找啊
08/12 01:35, 14F

08/12 01:43, , 15F
我好像判斷有點寫錯 我在研究一下...
08/12 01:43, 15F
※ 編輯: pigcat1315 來自: 114.34.109.77 (08/12 01:59)

08/12 02:00, , 16F
主要問題是 再把陣列傳給遞回嗎...
08/12 02:00, 16F
※ 編輯: pigcat1315 來自: 114.34.109.77 (08/12 02:01)

08/12 02:31, , 17F
我看過 Pro_Solve 那篇,看完後不知為何要設 array ?
08/12 02:31, 17F

08/12 02:56, , 18F
不必,就算遞迴呼叫傳回陣列,現在程式矩陣加法也會破功.
08/12 02:56, 18F

08/12 02:57, , 19F
應該要一步一步來,遞迴一定會產生新陣列,用參數表達也可以.
08/12 02:57, 19F

08/12 02:57, , 20F
然後改掉的陣列做矩陣加法,怎麼加? 矩陣加法函數也要寫一下
08/12 02:57, 20F

08/12 03:10, , 21F
t大因為我想用陣列來記錄每個點的值
08/12 03:10, 21F

08/12 03:14, , 22F
看錯意思 丟進去是因為 我有先用陣列紀錄灰階值
08/12 03:14, 22F

08/12 03:40, , 23F
有點好奇的是,即使紀錄了YMean/Gray,是否先算其 x,y 頂
08/12 03:40, 23F

08/12 03:40, , 24F
點,再做RSTA方便些? (也可能有其它實際問題我沒考量..)
08/12 03:40, 24F

08/12 03:49, , 25F
t大是指先求出RSAT 所的點有哪些在去求值嗎?
08/12 03:49, 25F

08/12 03:51, , 26F
如果是這樣也得紀錄 每個x y 吧@@
08/12 03:51, 26F
using namespace std; void sum(int ,int); int main (void) { int a=2,b=2; sum(a,b); system("pause"); return 0; } void sum(int a,int b) { int s; if(a==0&&b==0) { s=1; } else { sum(a-1,b-1); } cout<<s<<endl; } 再問個簡單的遞迴....為何 這樣跑出來的值QQ 不是只有 一個1 結果卻是 1 2008950864 16384 ※ 編輯: pigcat1315 來自: 114.32.115.221 (08/12 03:55)
文章代碼(AID): #1EG_gY5Z (C_and_CPP)
文章代碼(AID): #1EG_gY5Z (C_and_CPP)