数学建模社区-数学中国
标题:
极限测试之Matlab与Forcal的递归函数调用效率
[打印本页]
作者:
forcal
时间:
2011-7-31 10:08
标题:
极限测试之Matlab与Forcal的递归函数调用效率
以Fibonacci递归程序为例进行比较。
5 u' T& L5 }) v1 V- I9 K$ Y2 ?
* S* \1 f1 m2 X! h
Matlab 2009a的Fibonacci函数定义:
function k=fib(n)
1 c- i2 i0 X2 X
if n == 0
& @9 J4 }; F1 c2 Z! {) E0 G% {
k=0;
, C9 c2 b8 @* l C; P
return;
& W/ B* a- J y
else if n == 1
7 b; t3 \) {. x, ^
k=1;
: U @) m* u0 \" m- |4 X4 d& M8 M
return;
3 e( T2 V/ g. q( [
else
9 s7 U/ O0 a% \; u, K8 g
k=fib(n - 1) + fib(n - 2);
, I. i0 D. M8 v0 \8 l
return;
. |& p) \; D$ |! ~+ g& G
end
6 y3 q7 n5 v0 k3 ^
end
复制代码
运行结果:
tic;
. A, G# e! F, r7 b+ I1 v
fib(30)
) P) N! q. q! a
toc
; d) Z! ~& a, n' s6 I# N5 |
) t8 h6 w6 ?# S# H
ans =
4 U8 H; g- Z* P4 M. Q* z
832040
5 ]' e6 U+ X* s% C
+ J; T( T4 n# b$ y& c
Elapsed time is 26.315245 seconds.
复制代码
===============
4 K# W9 b1 F; G/ [ }
. {" |: r ]8 g7 N2 d
Forcal 9(OpenFC演示)的Fibonacci函数及代码:
SetRealStackMax(1000);
5 b" t. o. L7 ^
F(n)= which{
r2 P! O. F6 b1 \3 n+ V
n == 0,
1 Z, { X5 y0 A6 Q8 F- K8 t) i
return(0),
4 p7 c5 E8 `! d. O' s9 [
n == 1,
0 j0 h3 h% F7 j2 Z* K q* D
return(1),
) T0 d' n, F6 C5 x. L: k g* y
return [F(n - 1) + F(n - 2)]
/ z: N* L9 ~9 f* ~
};
2 H) c* t6 o( b
mvar:
3 f- [+ K5 W- ^; T2 L8 F
t=sys::clock(),
2 m- b, d, X, U2 h8 T, S8 B6 x
F(30);
5 n, U h1 Z9 r' X2 k) i
[sys::clock()-t]/1000;
复制代码
结果:
- k6 P# }0 W- z1 Q& j/ S, {
832040.
5 c% X% D) v8 R5 v
0.391 秒
# q- I1 Q$ {2 G3 D7 }2 X2 f
. e2 s# L, A! v) m; Y5 j& f
二者效率相差数十倍。
作者:
不特戈舟
时间:
2011-10-25 17:43
以后真的注意了。。。 楼主真好
作者:
alair005
时间:
2012-2-7 13:08
恩 是好东西啊 呵呵 ……
8193280172675049
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5