数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal的递归函数调用效率
[打印本页]
作者:
forcal
时间:
2011-7-31 10:08
标题:
极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。
' j ~, X1 W6 f
( v5 c0 d5 N( X; ^. q: i
Matlab 2009a的Fibonacci函数定义:
function k=fib(n)
3 Q* m. s8 R. i) H
if n == 0
& T4 K- U. v+ p! V! C! ?
k=0;
# Y8 M1 N- N, K M3 F3 y& x
return;
8 o% g0 P S! o) U5 h
else if n == 1
- v+ k+ y! \/ r% F
k=1;
4 Y( z* G( [) V# G
return;
3 S8 r6 |+ b& `! L5 c
else
, b) ^0 m, [; e- q$ Y" B$ [8 P' [
k=fib(n - 1) + fib(n - 2);
9 D0 e, K( @1 S2 u3 w
return;
9 q( E) B) U4 O4 W$ T+ Q* f8 Z+ j' t
end
( s+ z/ T K2 p3 W& l% X% `: Z
end
复制代码
运行结果:
tic;
; b' F6 m# C% _& o% b# V) `
fib(30)
: K- s- r8 @+ h9 G
toc
- L" q2 s6 K- Z7 o9 Z8 n4 S
0 ~& v& S: M" c2 z2 w% _
ans =
4 W- g2 q0 r6 c; ?
832040
2 K6 B. r: k. A) U: w# J' G
/ Z' ~# [0 a# Z6 B! `
Elapsed time is 26.315245 seconds.
复制代码
===============
$ r9 {+ |1 m5 U4 i2 B, ]4 e
a5 Q1 w1 n* ?: R! e g% V
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
SetRealStackMax(1000);
9 N4 \: v: R4 c$ d( d- ~
F(n)= which{
0 D; `9 o+ n8 h- N: O
n == 0,
& @! ~( I+ s! i/ m) ^
return(0),
5 K7 G( X. O: } {) E9 U
n == 1,
, D4 ?9 q5 |* M# D
return(1),
+ C& _+ y- o" a7 \
return [F(n - 1) + F(n - 2)]
4 j% m* j% u/ H, M2 h
};
# j! ~. |& w) t
mvar:
: | D( x& z" X! u
t=sys::clock(),
' f( `! @+ M6 a7 U0 m, ]7 x2 W) X
F(30);
; h. [9 `' n& Y1 |5 u7 `0 F
[sys::clock()-t]/1000;
复制代码
结果:
& w$ m: L4 Y6 a5 ~9 c% a
832040.
& G% m V$ P1 D, B" ?
0.391 秒
0 w# s- `* p$ {) ?; r; \4 D
* z9 a# j9 e/ h7 G
二者效率相差数十倍。
作者:
不特戈舟
时间:
2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者:
alair005
时间:
2012-2-7 13:08
恩 是好东西啊 呵呵 ……
8193280172675049
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5