Re: [問題] 請問這樣的程式要怎麼改成遞迴

看板C_and_CPP作者 (是嚮往亦或逃避)時間13年前 (2011/07/08 01:30), 編輯推噓0(008)
留言8則, 2人參與, 最新討論串3/3 (看更多)
個人直覺寫法,或許不是正規的遞回,請多包涵~ #include <stdlib.h> #include <stdio.h> #include <math.h> double err = pow(2.0, 5.0); //暫時縮小限值,不然要跑好久 double b[8] = {0, 0, 0, 0, 0, 0, 0, 0}; double m_tim = 0; int counter(int i) { // 邏輯概念是,先檢查b[i]+1有無超過限值 // 若超過, b[i] = b[i-1] + 1 // 若無超過, b[i] = b[i] + 1 if (i == 1) { if (b[1]+1 > err) { b[0] = b[0] + 1; return (b[0]); } return b[1]; } if (b[i]+1 > err) { b[i-1] = counter(i-1) + 1; return (b[i-1]); } else return (b[i]); } void main() { while (b[0] < err - sizeof b/sizeof b[0] + 1) { //這邊的"7"請自行根據ARRAY大小給值 b[7] = counter(7) + 1; m_tim = m_tim + 1; } printf("m_tim: %0.0f\n", m_tim); system("pause"); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.194.180.4 ※ 編輯: ljhgc 來自: 123.194.180.4 (07/08 01:31)

07/08 08:45, , 1F
有些沒寫到.... 要if((b[i]++)>err)
07/08 08:45, 1F

07/08 08:46, , 2F
b[1]同理
07/08 08:46, 2F

07/08 11:07, , 3F
F大,if (b[i]+1 > err)不就是您說的if((b[i]++)>err)
07/08 11:07, 3F

07/08 11:09, , 4F
您可能還沒弄清楚我的邏輯吧~這樣說吧counter(i)可以看成是
07/08 11:09, 4F

07/08 11:10, , 5F
b[i],可是當b[i]+1 > err時,會是b[i-1]
07/08 11:10, 5F

07/08 11:13, , 6F
若有疑惑,何不親自跑過一次我的code就知道了呢^^
07/08 11:13, 6F

07/08 11:19, , 7F
恩...大概有點看懂了...
07/08 11:19, 7F

07/08 11:36, , 8F
還有型態的問題
07/08 11:36, 8F
文章代碼(AID): #1E5Ur5BJ (C_and_CPP)
文章代碼(AID): #1E5Ur5BJ (C_and_CPP)