数学建模社区-数学中国

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

作者: forcal    时间: 2011-7-31 10:08
标题: 极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。- y; g! W& u0 @  C
: g" w, r' ?0 L7 l
Matlab 2009a的Fibonacci函数定义:
  1. function k=fib(n)* c( Z' n  O4 j( _
  2. if n == 0+ C3 o5 H& K9 z
  3.   k=0;
    / E/ J' Y# ?: t0 u) ]' d+ ?
  4.   return;
    % p; i& m+ M" V* K4 |
  5. else if n == 1
    / f0 y7 R" M; S
  6.   k=1;
    5 I# l) W2 q* b9 x! Y/ H7 N
  7.   return;
    ; e5 Q6 `. i- X8 u$ M) \$ V: q% Y
  8. else
    ) }. K* u, ^; \0 \$ X) K, h3 k& r
  9.   k=fib(n - 1) + fib(n - 2);- ?4 d, d' j6 J( t
  10.   return;
    # c; Z9 N6 Y( R) w, l
  11. end
    ' R# O! W1 [) V  m% N7 l
  12. end
复制代码
运行结果:
  1. tic;% w5 o1 ^7 E  n6 y0 `: R- k
  2. fib(30)6 M& _1 H: e6 H) C
  3. toc  _9 Z5 ?/ c' D8 k5 j! h

  4. ! [# i; N% E0 L8 K4 @! N3 J3 X
  5. ans =; x" D3 z' o* {6 g1 X5 x9 V# S
  6.       832040
    5 Z, s' {! j( E; O4 r( q

  7. 0 p2 C" m2 U) O, J# [
  8. Elapsed time is 26.315245 seconds.
复制代码
===============- k5 Z- i, _9 ?
+ {/ F! k0 J5 h  ?& {+ H7 P. @
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
  1. SetRealStackMax(1000);2 F+ C% V6 U6 |" Q4 I5 E3 }
  2. F(n)= which{" |0 `+ d/ t$ f$ W; z$ m
  3.     n == 0,
    . S6 X; V7 k0 I: |0 S
  4.         return(0),2 n) H& J$ p/ H
  5.     n == 1,: Z8 ]# w# i+ Q
  6.         return(1),- q3 {# R) j1 y. J0 K' }
  7.     return [F(n - 1) + F(n - 2)]0 q& U: \/ R. k# h) {: T$ A
  8. };" _( M; Y$ \3 ]% T8 f
  9. mvar:  M# z/ G8 V# \# c+ I  R
  10. t=sys::clock(),
    3 j" `0 k5 w: g/ A. N4 V6 e0 |
  11. F(30);. t" U  x1 h) [+ ^: y1 b
  12. [sys::clock()-t]/1000;
复制代码
结果:
5 }. U6 \/ c2 m832040.2 S6 V' B$ G: j$ k
0.391  秒
* r. S2 R9 C' y6 `# l) Q* n+ a8 f! |* p% i5 ?
二者效率相差数十倍。
作者: 不特戈舟    时间: 2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者: alair005    时间: 2012-2-7 13:08
恩 是好东西啊   呵呵  ……8193280172675049




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