数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal的递归函数调用效率
[打印本页]
作者:
forcal
时间:
2011-7-31 10:08
标题:
极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。
- y; g! W& u0 @ C
: g" w, r' ?0 L7 l
Matlab 2009a的Fibonacci函数定义:
function k=fib(n)
* c( Z' n O4 j( _
if n == 0
+ C3 o5 H& K9 z
k=0;
/ E/ J' Y# ?: t0 u) ]' d+ ?
return;
% p; i& m+ M" V* K4 |
else if n == 1
/ f0 y7 R" M; S
k=1;
5 I# l) W2 q* b9 x! Y/ H7 N
return;
; e5 Q6 `. i- X8 u$ M) \$ V: q% Y
else
) }. K* u, ^; \0 \$ X) K, h3 k& r
k=fib(n - 1) + fib(n - 2);
- ?4 d, d' j6 J( t
return;
# c; Z9 N6 Y( R) w, l
end
' R# O! W1 [) V m% N7 l
end
复制代码
运行结果:
tic;
% w5 o1 ^7 E n6 y0 `: R- k
fib(30)
6 M& _1 H: e6 H) C
toc
_9 Z5 ?/ c' D8 k5 j! h
! [# i; N% E0 L8 K4 @! N3 J3 X
ans =
; x" D3 z' o* {6 g1 X5 x9 V# S
832040
5 Z, s' {! j( E; O4 r( q
0 p2 C" m2 U) O, J# [
Elapsed time is 26.315245 seconds.
复制代码
===============
- k5 Z- i, _9 ?
+ {/ F! k0 J5 h ?& {+ H7 P. @
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
SetRealStackMax(1000);
2 F+ C% V6 U6 |" Q4 I5 E3 }
F(n)= which{
" |0 `+ d/ t$ f$ W; z$ m
n == 0,
. S6 X; V7 k0 I: |0 S
return(0),
2 n) H& J$ p/ H
n == 1,
: Z8 ]# w# i+ Q
return(1),
- q3 {# R) j1 y. J0 K' }
return [F(n - 1) + F(n - 2)]
0 q& U: \/ R. k# h) {: T$ A
};
" _( M; Y$ \3 ]% T8 f
mvar:
M# z/ G8 V# \# c+ I R
t=sys::clock(),
3 j" `0 k5 w: g/ A. N4 V6 e0 |
F(30);
. t" U x1 h) [+ ^: y1 b
[sys::clock()-t]/1000;
复制代码
结果:
5 }. U6 \/ c2 m
832040.
2 S6 V' B$ G: j$ k
0.391 秒
* r. S2 R9 C' y6 `
# l) Q* n+ a8 f! |* p% i5 ?
二者效率相差数十倍。
作者:
不特戈舟
时间:
2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者:
alair005
时间:
2012-2-7 13:08
恩 是好东西啊 呵呵 ……
8193280172675049
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5