数学建模社区-数学中国

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

作者: forcal    时间: 2011-7-31 10:08
标题: 极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。' j  ~, X1 W6 f

( v5 c0 d5 N( X; ^. q: iMatlab 2009a的Fibonacci函数定义:
  1. function k=fib(n)3 Q* m. s8 R. i) H
  2. if n == 0
    & T4 K- U. v+ p! V! C! ?
  3.   k=0;# Y8 M1 N- N, K  M3 F3 y& x
  4.   return;
    8 o% g0 P  S! o) U5 h
  5. else if n == 1
    - v+ k+ y! \/ r% F
  6.   k=1;
    4 Y( z* G( [) V# G
  7.   return;3 S8 r6 |+ b& `! L5 c
  8. else
    , b) ^0 m, [; e- q$ Y" B$ [8 P' [
  9.   k=fib(n - 1) + fib(n - 2);9 D0 e, K( @1 S2 u3 w
  10.   return;9 q( E) B) U4 O4 W$ T+ Q* f8 Z+ j' t
  11. end
    ( s+ z/ T  K2 p3 W& l% X% `: Z
  12. end
复制代码
运行结果:
  1. tic;
    ; b' F6 m# C% _& o% b# V) `
  2. fib(30)
    : K- s- r8 @+ h9 G
  3. toc
    - L" q2 s6 K- Z7 o9 Z8 n4 S

  4. 0 ~& v& S: M" c2 z2 w% _
  5. ans =4 W- g2 q0 r6 c; ?
  6.       832040
    2 K6 B. r: k. A) U: w# J' G
  7. / Z' ~# [0 a# Z6 B! `
  8. Elapsed time is 26.315245 seconds.
复制代码
===============$ r9 {+ |1 m5 U4 i2 B, ]4 e
  a5 Q1 w1 n* ?: R! e  g% V
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
  1. SetRealStackMax(1000);9 N4 \: v: R4 c$ d( d- ~
  2. F(n)= which{0 D; `9 o+ n8 h- N: O
  3.     n == 0,& @! ~( I+ s! i/ m) ^
  4.         return(0),
    5 K7 G( X. O: }  {) E9 U
  5.     n == 1,, D4 ?9 q5 |* M# D
  6.         return(1),+ C& _+ y- o" a7 \
  7.     return [F(n - 1) + F(n - 2)]
    4 j% m* j% u/ H, M2 h
  8. };# j! ~. |& w) t
  9. mvar:
    : |  D( x& z" X! u
  10. t=sys::clock(),' f( `! @+ M6 a7 U0 m, ]7 x2 W) X
  11. F(30);
    ; h. [9 `' n& Y1 |5 u7 `0 F
  12. [sys::clock()-t]/1000;
复制代码
结果:
& w$ m: L4 Y6 a5 ~9 c% a832040.
& G% m  V$ P1 D, B" ?0.391  秒0 w# s- `* p$ {) ?; r; \4 D

* z9 a# j9 e/ h7 G二者效率相差数十倍。
作者: 不特戈舟    时间: 2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者: alair005    时间: 2012-2-7 13:08
恩 是好东西啊   呵呵  ……8193280172675049




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