谁的效率高?
/*符号*/Sign(int k)
{if(k==0) return 1;
else if(k==1) return(-2);
}
void Calculate(int count,int sum)
{char i;
for(i=0;i<2;i++)
{sum=sum+Sign(i)*stone[count];
if(count > 0)
Calculate(count-1,sum);/*递归调用直到count等于0*/
else if(count == 0)
{sum_no++;/*sum_no <= pow(2,count)*/
if(sum >= 0)
{if(min_sum > sum)
{min_sum=sum;
me[0]=sum_no;
me_total=1;
}
else if(min_sum == sum)
{
if(me_total < 15) me[me_total]=sum_no;
me_total++;
}
}
}
}
}
我将以上的函数Calculate(int count,int sum)改成下面的样子,主要是红色部分.
half=pow(2,count-1);
void Calculate(int count,int sum)
{char i;
for(i=0;i<2 && sum_no<half;i++)
{
sum=sum+Sign(i)*stone[count];
if(count > 0)
Calculate(count-1,sum);/*递归调用直到count等于0*/
else if(count == 0)
{sum_no++;/*sum_no <= pow(2,count-1)*/
if(min_sum > abs(sum))
{min_sum=abs(sum);
me[0]=sum_no;
me_total=1;
}
else if(min_sum == abs(sum);)
{
if(me_total < 15) me[me_total]=sum_no;
me_total++;
}
}
}
}
没改动前,程序将会执行pow(2,count)次函数Calculate(int count,int sum);
改动后只执行pow(2,count-1)次,少了一半;
但是,你看,我又增加了超过pow(2,count-1)次abs()函数的调用.
请问我这样改动能提高程序的执行效率吗???
为什么????
[此贴子已经被作者于2006-6-19 21:41:49编辑过]