美文网首页
递归,轻松了你,难了电脑 | 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