Re: [問題] 請問這樣的程式要怎麼改成遞迴
※ 引述《poiuy777 (帥氣又拉風)》之銘言:
: 以下是我已經寫好的 但是有一行我怎麼塞就是塞不進去(if之後的那行)
: 希望有人可以幫幫我
: #include <stdlib.h>
: #include <iostream.h>
: #include <math.h>
: double test1(double x){
: double err = 2^10, tim = 1, a = zeros(1,x);
: while (a[0] < err - sizeof a/sizeof a[0] + 1) {
: for (i = (length(a)-1; i<=2; i--) {
: if a[i] > err
: a[i-1] = a[i-1] + 1;
: a[i] = a[i] + 1;
: }
: % ????????????????????????????????????????
: }
應該是:
for (i = length(a)-1; i> 0; i--) {
a[i] = a[i] + 1;
if (a[i] > err) {
a[i-1] = a[i-1] + 1;
a[i] = a[i-1] + 1;
}
} //Update:但經kinglord提醒,這樣改寫不對. stateful果然很煩人.
//Update: 這一段程式應該寫成以下這樣:
// for (i = length(a)-2, a[i+1] = a[i+1] + 1;
// (i > 0 && a[i] > err) || i == 0;
// i--)
// {
// a[i] = a[i] + 1;
// }
// for (i = 0; i < length(a)-1; i++) {
// if (a[i] <= err+1) continue;
// a[i+1] = a[i] + 1;
// }
: tim = tim + 1;
: }
: cout << tim;
: }
: 那行不能放在if內 但我也不知道該放哪
: 在這先謝謝各位了
至於你說的遞迴,大概是這樣: 整個while是一個狀態機,走到最後一步產生tim值.
所以:
main() {
double err = pow(2, 10);
double a[4] = {0, 0, 0, 0};
long tim = 0;
int len = sizeof a / sizeof a[0];
int count(double a[], int len, double err, long tim);
tim = count(a, len, err, 0);
cout << tim;
system("pause");
}
int count(double a[], int len, double err, long tim) {
int i;
void m_arr(double& a[], int len, int index);
if (a[0] >= err - len + 1) return tim;
m_arr(a, len, len-1);
return count(a, len, err, tim+1);
}
void m_arr(double& a[], int len, int index) {
if (index < 1) {
a[0] = a[0] + 1;
return;
}
a[index] = a[index] + 1;
if (a[index] > err) {
m_arr(a, len, index-1);
a[index] = a[index-1] + 1;
}
return;
}
a[]的數目傳遞過程的確是遞迴,原po你雖然沒把迴圈拉出來,
但是有感覺到那個遞迴結構,很厲害唷,很有潛力!
--
/yau
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.224.234
→
07/06 23:16, , 1F
07/06 23:16, 1F
※ 編輯: yauhh 來自: 59.112.224.234 (07/06 23:17)
※ 編輯: yauhh 來自: 59.112.224.234 (07/06 23:18)
→
07/06 23:18, , 2F
07/06 23:18, 2F
→
07/06 23:21, , 3F
07/06 23:21, 3F
→
07/06 23:24, , 4F
07/06 23:24, 4F
→
07/06 23:30, , 5F
07/06 23:30, 5F
→
07/06 23:32, , 6F
07/06 23:32, 6F
※ 編輯: yauhh 來自: 59.112.224.234 (07/06 23:47)
※ 編輯: yauhh 來自: 59.112.224.234 (07/07 00:18)
※ 編輯: yauhh 來自: 59.112.224.234 (07/07 00:21)
推
07/07 00:31, , 7F
07/07 00:31, 7F
※ 編輯: yauhh 來自: 59.112.224.234 (07/07 09:27)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):