数学建模社区-数学中国

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

作者: forcal    时间: 2011-7-31 10:08
标题: 极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。+ s5 x. P' g+ s2 q1 n& ^4 `

2 M4 d1 r$ b9 c- rMatlab 2009a的Fibonacci函数定义:
  1. function k=fib(n)
    * I6 W: I0 a; R; b2 v1 K8 D
  2. if n == 0
    0 e! c8 i* A; N9 Y6 f2 Q6 {* R
  3.   k=0;
    & r+ U/ j- i) H  K7 D
  4.   return;3 l+ a* z" D( v& K2 g/ @
  5. else if n == 1& D! m; u' t8 E4 N% r) l& z
  6.   k=1;: C6 f3 [2 Y# g$ W& V
  7.   return;
    # I* o8 ^7 E6 c5 i' f. z8 D) T5 A
  8. else/ r0 N7 ~) E  d5 A1 i
  9.   k=fib(n - 1) + fib(n - 2);- T  e) S7 ]1 W$ F
  10.   return;' R4 C; f+ ?- E: |
  11. end# O6 Q7 ^2 q) g6 {1 J
  12. end
复制代码
运行结果:
  1. tic;+ J) |. h! K: p, c4 @8 e, E
  2. fib(30)
    : T8 d8 U1 r6 W/ }; [
  3. toc
    : ~! C8 x" w0 Y. |/ d; I

  4. / O4 \' T, l6 l# o9 ^
  5. ans =0 ~6 o* Q8 l5 X
  6.       832040) R8 M* n/ o, ^/ c# k
  7. 1 i% `0 e3 ~% y1 d- S3 V
  8. Elapsed time is 26.315245 seconds.
复制代码
===============
* V2 j# l- A! Y* X' C+ [
0 Q+ h$ C4 Q# G+ }- cForcal 9(OpenFC演示)的Fibonacci函数及代码:
  1. SetRealStackMax(1000);  P8 `! P( i7 Y) w3 V
  2. F(n)= which{
    4 N5 p& {- m5 K) l8 r
  3.     n == 0,
    6 i. l6 ^* A; V# ?
  4.         return(0),
    5 ^7 j  p. r0 T: W1 q, p+ s. c# @4 G5 j2 W
  5.     n == 1,) X6 c( a- E" y! j: J
  6.         return(1),4 P0 ^8 K: w8 r, e3 I. o' ~
  7.     return [F(n - 1) + F(n - 2)]
    + x" }, @+ S8 i" @/ T
  8. };& b8 O2 d/ E5 e6 f* P
  9. mvar:
    : s: f" y, S3 K( E7 G2 \
  10. t=sys::clock(),
    - O. p. q" M! A" e
  11. F(30);9 @9 R, S' s! @8 I# g; ?
  12. [sys::clock()-t]/1000;
复制代码
结果:+ \- i% N! y) g- w! v' a
832040.( b% B4 ]. f" Q6 O
0.391  秒0 E; H" O, z" H2 J, ]& J

2 h: Y- c. s6 P( X二者效率相差数十倍。
作者: 不特戈舟    时间: 2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者: alair005    时间: 2012-2-7 13:08
恩 是好东西啊   呵呵  ……8193280172675049




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