数学建模社区-数学中国

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

作者: forcal    时间: 2011-7-31 10:08
标题: 极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。- Z$ `! I8 e4 v& F

/ e, ?7 z) M1 X. u6 mMatlab 2009a的Fibonacci函数定义:
  1. function k=fib(n)
    , M4 g0 P  P* |3 D9 N% d
  2. if n == 0
    / P6 R, A4 j9 a
  3.   k=0;
    0 h+ p- _* R" `/ ^6 q( ^
  4.   return;1 H5 h$ ~! h; _* o0 C. j8 o" ]
  5. else if n == 1* ]7 I) r2 ]0 G6 n  C* R" [
  6.   k=1;: O, B3 j6 ^+ s0 d3 t& ^8 N/ Y
  7.   return;0 `8 o) ^! v- f5 i
  8. else8 n7 s7 c& [: [$ l8 Y# @, j
  9.   k=fib(n - 1) + fib(n - 2);* m( n2 J) w- p, ]8 E0 o
  10.   return;* z, S# l4 F0 K$ m
  11. end5 E6 q. }+ V! A- g" h
  12. end
复制代码
运行结果:
  1. tic;. r$ X; U2 ]2 N) q- {7 T% Q
  2. fib(30)% u  l$ G! c, E: L
  3. toc7 ]; X# [1 R' H/ ^- _" q# {2 \
  4. 4 Y9 |6 t. c( Z( [: t
  5. ans =
    % W& k. L3 Y% Q6 o" I! q5 w# R
  6.       832040
    2 T4 F6 }4 f4 T+ F
  7. & }( [+ Q, b" C; c) `  }7 q" A
  8. Elapsed time is 26.315245 seconds.
复制代码
===============# |6 {, `) K% Q4 v

' C8 T/ A0 Z$ a% rForcal 9(OpenFC演示)的Fibonacci函数及代码:
  1. SetRealStackMax(1000);, J& Z3 m% A) b6 T
  2. F(n)= which{- x  p) r& e3 j% J6 L1 ^& J
  3.     n == 0,
    % S$ t( U+ n. P& ~3 A' q9 N
  4.         return(0),
    " u' O/ S/ r% Q( u+ `% h
  5.     n == 1,
    5 X1 Q& F5 G7 i
  6.         return(1),
    - }4 ?; w% \0 Z8 e) i
  7.     return [F(n - 1) + F(n - 2)]' |- E3 y# m, H# S' l5 @
  8. };: v+ E5 ^1 x8 n4 o# B; W6 z
  9. mvar:- N/ c0 H! j8 D- L
  10. t=sys::clock(),7 l' W! M/ T0 ^# Z+ N
  11. F(30);" I  j7 c' j% v) Q' b( [# r  g
  12. [sys::clock()-t]/1000;
复制代码
结果:
. ?3 m& d: X/ d& u0 y4 C832040.1 v6 }4 U7 E/ n
0.391  秒
. {3 a; H# k. M, z
% r1 a  l5 s) T- l& `8 P二者效率相差数十倍。
作者: 不特戈舟    时间: 2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者: alair005    时间: 2012-2-7 13:08
恩 是好东西啊   呵呵  ……8193280172675049




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