数学建模社区-数学中国

标题: 极限测试之Matlab与Forcal的递归函数调用效率 [打印本页]

作者: forcal    时间: 2011-7-31 10:08
标题: 极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。
5 u' T& L5 }) v1 V- I9 K$ Y2 ?* S* \1 f1 m2 X! h
Matlab 2009a的Fibonacci函数定义:
  1. function k=fib(n)
    1 c- i2 i0 X2 X
  2. if n == 0
    & @9 J4 }; F1 c2 Z! {) E0 G% {
  3.   k=0;
    , C9 c2 b8 @* l  C; P
  4.   return;
    & W/ B* a- J  y
  5. else if n == 1
    7 b; t3 \) {. x, ^
  6.   k=1;
    : U  @) m* u0 \" m- |4 X4 d& M8 M
  7.   return;
    3 e( T2 V/ g. q( [
  8. else9 s7 U/ O0 a% \; u, K8 g
  9.   k=fib(n - 1) + fib(n - 2);
    , I. i0 D. M8 v0 \8 l
  10.   return;
    . |& p) \; D$ |! ~+ g& G
  11. end6 y3 q7 n5 v0 k3 ^
  12. end
复制代码
运行结果:
  1. tic;
    . A, G# e! F, r7 b+ I1 v
  2. fib(30)
    ) P) N! q. q! a
  3. toc; d) Z! ~& a, n' s6 I# N5 |

  4. ) t8 h6 w6 ?# S# H
  5. ans =4 U8 H; g- Z* P4 M. Q* z
  6.       8320405 ]' e6 U+ X* s% C

  7. + J; T( T4 n# b$ y& c
  8. Elapsed time is 26.315245 seconds.
复制代码
===============
4 K# W9 b1 F; G/ [  }. {" |: r  ]8 g7 N2 d
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
  1. SetRealStackMax(1000);
    5 b" t. o. L7 ^
  2. F(n)= which{
      r2 P! O. F6 b1 \3 n+ V
  3.     n == 0,
    1 Z, {  X5 y0 A6 Q8 F- K8 t) i
  4.         return(0),
    4 p7 c5 E8 `! d. O' s9 [
  5.     n == 1,0 j0 h3 h% F7 j2 Z* K  q* D
  6.         return(1),
    ) T0 d' n, F6 C5 x. L: k  g* y
  7.     return [F(n - 1) + F(n - 2)]
    / z: N* L9 ~9 f* ~
  8. };
    2 H) c* t6 o( b
  9. mvar:
    3 f- [+ K5 W- ^; T2 L8 F
  10. t=sys::clock(),
    2 m- b, d, X, U2 h8 T, S8 B6 x
  11. F(30);
    5 n, U  h1 Z9 r' X2 k) i
  12. [sys::clock()-t]/1000;
复制代码
结果:- k6 P# }0 W- z1 Q& j/ S, {
832040.5 c% X% D) v8 R5 v
0.391  秒# q- I1 Q$ {2 G3 D7 }2 X2 f

. e2 s# L, A! v) m; Y5 j& f二者效率相差数十倍。
作者: 不特戈舟    时间: 2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者: alair005    时间: 2012-2-7 13:08
恩 是好东西啊   呵呵  ……8193280172675049




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5