遞迴[BoHann]

文章推薦指數: 80 %
投票人數:10人

函數在進行遞迴呼叫時,在其所使用的變數被堆積在堆疊區域,每次執行return敘述,函數在該層呼叫中所 ... 個人建議:雖說傳出的陣列是二維的,但是可以用一維陣列來傳. 跳至內容 BoHann 使用者工具 登入 網站工具 工具顯示原始碼舊版反向連結最近更新多媒體管理器網站地圖登入 最近更新多媒體管理器網站地圖 足跡:•遞迴 遞迴 C語言的函數可進行遞迴呼叫(recursivecall),也就是說在函數之中可呼叫函數本身。

函數在進行遞迴呼叫時,在其所使用的變數被堆積在堆疊區域,每次執行return敘述,函數在該層呼叫中所使用的變數就從堆疊返回。

看不懂上面說的呴……那孫悟空應該知道吧,孫悟空可以用猴毛變出更多的小悟空,函數可以叫出更多的「自己」,但要注意: 呼叫出新的函數之後,原來的函數就停下來,被呼叫出來的先做 被呼叫出來的函數和原來的函數並不是「同時執行」的喔,類似「線性」的,所以你可以慢慢分析程式 原來的呼叫程式就會「等著你回來~~」 迴圈的程式碼可以改用遞迴撰寫(我不會證) 遞迴需要較多的記憶體空間,因為每呼叫一次,原來函數的「東西」就要以堆疊的方式「先保留著」,等到遞迴「到底」之後才能一個一個回收 當程式的主體有很高的重複性,然後有辦法將問題做簡化的切割的時候,就可以考慮使用遞迴設計 Q01:運用遞迴的觀念寫階乘 本題注意事項:先把下面這個「經典範例」看懂吧,看懂就知道遞迴是怎麼做的了 #include usingnamespacestd; intmy_function(inta) {   if(a==1) { return1; } else { a=a*my_function(a-1); } returna; } intmain(void) { inta;   cout<>a;   cout< usingnamespacestd; intgcd(intm,intn) { if(n==0) returnm; else returngcd(n,m%n); } intmain() { intm=0; intn=0; cout<>m>>n; cout< usingnamespacestd; //0是白色1是黑色 /* intdata[4][4]= { {0,0,0,0}, {0,1,0,0}, {0,0,1,1}, {0,0,1,1}   }; //測試結果:gwgwwwbwb */ /* intdata[4][4]= { {1,0,0,0}, {0,1,1,0}, {0,1,1,0}, {0,0,0,0}   }; //測試結果:ggwwbwgwbwbgbwwwgwbww */   intdata[8][8]= { {0,0,0,0,1,1,1,1}, {0,0,0,0,1,1,1,1}, {0,0,1,0,1,1,1,1}, {0,0,1,0,1,1,1,1}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1}, {0,0,0,0,1,1,1,1} }; //測試結果:gbgwwwgwbbwwgwwgwwbbb   //主要功能,傳入左上角的座標、邊長,程式判斷直接可以處理呢?還是繼續下一層 voidmy_function(intr,intc,intn) { inti,j,test,result;   //取樣點 test=data[r][c];   //假設檢查會成功   result=1;   for(i=r;i //決定可處理的資料量 usingnamespacestd; voidho(intplates,charfrom,charto) { chartemp;   if(plates==1) { cout<



請為這篇文章評分?