递归思想很是常用,编写程序也很简单。但因为每次都要等前面结果出来才能进行下一步计算,很耗内存和时间。大数据是这种还是要考虑一下再用
#递归思想完成斐波那契数列
feb <- function(n) {
if (n == 0 || n == 1) {
return(n)
}else {
return(feb(n-1) + feb(n-2))
}
}
#常规思想完成斐波那契数列
feb2 <- function(n){
f0 = 0
f1 = 1
if (n == 0 || n == 1) {
return(n)
}else {
for(i in 2:n){
temp = f1
f1 = f0 + f1
f0 = temp
}
return(f1)
}
}
#运行时间函数
run <- function(n,f) {
T1 = Sys.time()
a = f(n)
T2 = Sys.time()
l = list(a, T2 - T1)
return(l)
}
#画图看一下差距
#递归
x = list()
y = list()
for(i in 1:35) {
x = append(x,i)
a = run(i,feb)
b = as.vector(unlist(a[2]))
y = append(y,b)
}
plot(unlist(x),unlist(y))
#常规
x = list()
y = list()
for(i in 1:3000) {
x = append(x,i)
a = run(i,feb2)
b = as.vector(unlist(a[2]))
y = append(y,b)
}
plot(unlist(x),unlist(y))
递归
把n增大到3000,常规方法也是秒出结果,但是递归到35就有点扛不住了
常规
网友评论