作者ljhgc (是嚮往亦或逃避)
看板C_and_CPP
標題Re: [問題] 請問這樣的程式要怎麼改成遞迴
時間Fri Jul 8 01:30:40 2011
個人直覺寫法,或許不是正規的遞回,請多包涵~
#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)
→ firejox:有些沒寫到.... 要if((b[i]++)>err) 07/08 08:45
→ firejox:b[1]同理 07/08 08:46
→ ljhgc:F大,if (b[i]+1 > err)不就是您說的if((b[i]++)>err) 07/08 11:07
→ ljhgc:您可能還沒弄清楚我的邏輯吧~這樣說吧counter(i)可以看成是 07/08 11:09
→ ljhgc:b[i],可是當b[i]+1 > err時,會是b[i-1] 07/08 11:10
→ ljhgc:若有疑惑,何不親自跑過一次我的code就知道了呢^^ 07/08 11:13
→ firejox:恩...大概有點看懂了... 07/08 11:19
→ firejox:還有型態的問題 07/08 11:36