|
发表于 2003-7-24 11:37:20
|
显示全部楼层
这是我写的两个
- double mypow3 (double x, long unsigned y)
- {
- if (y == 0)
- return 1;
- double z = mypow3 (x, y / 2);
- if (y % 2)
- return z * z * x;
- else
- return z * z;
- }
- double mypow4(double x, long unsigned y)
- {
- if (y == 0)
- return 1;
- long i = 1;
- double z = x;
- while ( i * 2 <= y )
- {
- x *= x;
- i *= 2;
- }
- return x * mypow4(z, y - i);
- }
- int main()
- {
- long unsigned i;
- double z;
- for(i = 0; i < 9999999; i++)
- z = mypow3(1.001,10000);
- printf("%lf\n", z);
- }
复制代码
测试:
>gcc -o mypow3 mypow.c
>time ./mypow3
21916.681339
real 0m3.912s
user 0m3.900s
sys 0m0.010s
把main中的mypow3改成mypow4
>gcc -o mypow4 mypow.c
>time ./mypow4
21916.681339
real 0m6.428s
user 0m6.400s
sys 0m0.030s
我写mypow4的目的是想减少mypow3的递归次数。
可是没想到性能反而下降了,看来递归的性能还是蛮高的。 |
|