数学建模社区-数学中国
标题:
极限测试之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 E
Matlab 2009a的Fibonacci函数定义:
function k=fib(n)
2 v: p6 V/ ~' G( P, N- {/ R
if n == 0
2 Q. U0 t C' \
k=0;
0 M" T7 u! f; z1 Q" F! \" K; [) F
return;
' p2 u+ ?3 v9 U" l6 L; Z
else if n == 1
1 I- h1 g! `( K7 `( F5 X
k=1;
8 Y: i% F2 I. C2 O/ j
return;
5 m2 p& \ m/ z$ |: K3 Y
else
% q8 F& h4 }/ Y: I A4 n
k=fib(n - 1) + fib(n - 2);
- @4 J% Y" O- z1 m
return;
( o) e2 N) r Q/ O" T+ a
end
3 e" u1 T2 J2 S$ t' `+ O
end
复制代码
运行结果:
tic;
7 Y) Y' k' \4 H, ~4 n0 c* f' \2 F8 n
fib(30)
2 t8 |) \7 i8 a+ ]; T
toc
) n3 S4 |) A) h# u, b* U" T
6 |; n4 N4 J- D1 J4 r+ E' g+ ~. }
ans =
4 c, J! S3 H: o; V2 X2 v
832040
3 O% I% e& [3 o; J; r
' a& V# n* [; H! ?
Elapsed time is 26.315245 seconds.
复制代码
===============
- |1 W0 `0 Y2 q! E# p8 E0 F
( |) T: t) d" X" X' G: l
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
SetRealStackMax(1000);
& G6 H& k# w3 E( R+ s
F(n)= which{
/ T ~) R, ?) h
n == 0,
! q* e3 M4 m e) z
return(0),
; q: ]$ [& Y6 F7 N6 }" Y3 W- K
n == 1,
6 A" u: R! w h2 l
return(1),
" U9 \% o( A% @2 J" d$ M( ?/ J N* ?
return [F(n - 1) + F(n - 2)]
8 \; @2 {% g: t
};
- z* O- B) r1 H( Y2 w _$ d/ c8 }
mvar:
( u# u7 X1 k! J1 [ K3 j2 U& `
t=sys::clock(),
7 X g5 g# E3 y. R9 z& q
F(30);
! c' f- o( z. I3 j1 S
[sys::clock()-t]/1000;
复制代码
结果:
4 K' P. N0 K! J- E( o$ G Y$ t$ z
832040.
. l5 P2 G- _, I; u
0.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