数学建模社区-数学中国
标题:
极限测试之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- r
Matlab 2009a的Fibonacci函数定义:
function k=fib(n)
* I6 W: I0 a; R; b2 v1 K8 D
if n == 0
0 e! c8 i* A; N9 Y6 f2 Q6 {* R
k=0;
& r+ U/ j- i) H K7 D
return;
3 l+ a* z" D( v& K2 g/ @
else if n == 1
& D! m; u' t8 E4 N% r) l& z
k=1;
: C6 f3 [2 Y# g$ W& V
return;
# I* o8 ^7 E6 c5 i' f. z8 D) T5 A
else
/ r0 N7 ~) E d5 A1 i
k=fib(n - 1) + fib(n - 2);
- T e) S7 ]1 W$ F
return;
' R4 C; f+ ?- E: |
end
# O6 Q7 ^2 q) g6 {1 J
end
复制代码
运行结果:
tic;
+ J) |. h! K: p, c4 @8 e, E
fib(30)
: T8 d8 U1 r6 W/ }; [
toc
: ~! C8 x" w0 Y. |/ d; I
/ O4 \' T, l6 l# o9 ^
ans =
0 ~6 o* Q8 l5 X
832040
) R8 M* n/ o, ^/ c# k
1 i% `0 e3 ~% y1 d- S3 V
Elapsed time is 26.315245 seconds.
复制代码
===============
* V2 j# l- A! Y* X' C+ [
0 Q+ h$ C4 Q# G+ }- c
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
SetRealStackMax(1000);
P8 `! P( i7 Y) w3 V
F(n)= which{
4 N5 p& {- m5 K) l8 r
n == 0,
6 i. l6 ^* A; V# ?
return(0),
5 ^7 j p. r0 T: W1 q, p+ s. c# @4 G5 j2 W
n == 1,
) X6 c( a- E" y! j: J
return(1),
4 P0 ^8 K: w8 r, e3 I. o' ~
return [F(n - 1) + F(n - 2)]
+ x" }, @+ S8 i" @/ T
};
& b8 O2 d/ E5 e6 f* P
mvar:
: s: f" y, S3 K( E7 G2 \
t=sys::clock(),
- O. p. q" M! A" e
F(30);
9 @9 R, S' s! @8 I# g; ?
[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