数学建模社区-数学中国

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

作者: forcal    时间: 2011-7-31 10:08
标题: 极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。
% ~: u# Z5 Y7 D8 |" p- t6 p% ?4 e. _
9 c% e; D. `, }) j7 EMatlab 2009a的Fibonacci函数定义:
  1. function k=fib(n)2 v: p6 V/ ~' G( P, N- {/ R
  2. if n == 0
    2 Q. U0 t  C' \
  3.   k=0;
    0 M" T7 u! f; z1 Q" F! \" K; [) F
  4.   return;
    ' p2 u+ ?3 v9 U" l6 L; Z
  5. else if n == 1
    1 I- h1 g! `( K7 `( F5 X
  6.   k=1;8 Y: i% F2 I. C2 O/ j
  7.   return;
    5 m2 p& \  m/ z$ |: K3 Y
  8. else% q8 F& h4 }/ Y: I  A4 n
  9.   k=fib(n - 1) + fib(n - 2);- @4 J% Y" O- z1 m
  10.   return;( o) e2 N) r  Q/ O" T+ a
  11. end
    3 e" u1 T2 J2 S$ t' `+ O
  12. end
复制代码
运行结果:
  1. tic;
    7 Y) Y' k' \4 H, ~4 n0 c* f' \2 F8 n
  2. fib(30)
    2 t8 |) \7 i8 a+ ]; T
  3. toc) n3 S4 |) A) h# u, b* U" T

  4. 6 |; n4 N4 J- D1 J4 r+ E' g+ ~. }
  5. ans =4 c, J! S3 H: o; V2 X2 v
  6.       8320403 O% I% e& [3 o; J; r
  7. ' a& V# n* [; H! ?
  8. Elapsed time is 26.315245 seconds.
复制代码
===============- |1 W0 `0 Y2 q! E# p8 E0 F

( |) T: t) d" X" X' G: lForcal 9(OpenFC演示)的Fibonacci函数及代码:
  1. SetRealStackMax(1000);
    & G6 H& k# w3 E( R+ s
  2. F(n)= which{/ T  ~) R, ?) h
  3.     n == 0,! q* e3 M4 m  e) z
  4.         return(0),
    ; q: ]$ [& Y6 F7 N6 }" Y3 W- K
  5.     n == 1,6 A" u: R! w  h2 l
  6.         return(1)," U9 \% o( A% @2 J" d$ M( ?/ J  N* ?
  7.     return [F(n - 1) + F(n - 2)]8 \; @2 {% g: t
  8. };- z* O- B) r1 H( Y2 w  _$ d/ c8 }
  9. mvar:
    ( u# u7 X1 k! J1 [  K3 j2 U& `
  10. t=sys::clock(),7 X  g5 g# E3 y. R9 z& q
  11. F(30);! c' f- o( z. I3 j1 S
  12. [sys::clock()-t]/1000;
复制代码
结果:4 K' P. N0 K! J- E( o$ G  Y$ t$ z
832040.
. l5 P2 G- _, I; u0.391  秒% w2 c! N, \2 y! r
* E* ^& ?* X- p7 I+ [
二者效率相差数十倍。
作者: 不特戈舟    时间: 2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者: alair005    时间: 2012-2-7 13:08
恩 是好东西啊   呵呵  ……8193280172675049




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