美文网首页
递归,轻松了你,难了电脑 | R

递归,轻松了你,难了电脑 | R

作者: kkkkkkang | 来源:发表于2020-09-11 11:05 被阅读0次

递归思想很是常用,编写程序也很简单。但因为每次都要等前面结果出来才能进行下一步计算,很耗内存和时间。大数据是这种还是要考虑一下再用

#递归思想完成斐波那契数列
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就有点扛不住了


常规

相关文章

网友评论

      本文标题:递归,轻松了你,难了电脑 | R

      本文链接:https://www.haomeiwen.com/subject/vcmvektx.html