【问题标题】:not using for loop in R for recursion?不在 R 中使用 for 循环进行递归?
【发布时间】:2015-12-30 23:44:05
【问题描述】:

我想知道如何在不使用for 循环的情况下编写递归代码 一个向量?会不会更有效率?

我的for循环代码:

fib <- function(n){

  if (n==2){
    return c(1,1)
  }
  if (n==1){
    return c(1)
  }

  v=c(1,1)
  for (i in 3:n ) {
    v=c(v,v[i-1]+v[i-2])
  }  

  return(v)

} 

我看了一篇文章,它说在重新创建整个向量时附加到 R 中的向量效率不高?

【问题讨论】:

  • 首先,您的基本情况不是有效的 r 语法。您可能需要 rep(1,2)1 分别用于那些(即括号无效)。
  • 嗨罗兰。谢谢回复。我要系列而不是总和
  • 感谢 devmacrile 的收获!

标签: r


【解决方案1】:

我知道这并不能回答您关于在没有 for 循环的情况下生成斐波那契数列的问题,但一个快速的解决方案可能是使用 Rcpp。不增长结果向量的代码递归变得混乱。

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]                                                                                               
NumericVector fib(int n) {

  NumericVector res(n);

  if (n==0)
    return(res);

  res(0) = 1;

  if (n>1) {
    res(1) = 1;

    for (int i=2; i < n ; i++) {
      res(i) = res(i-1) +   res(i-2);
    }
  }
  return(res);
}

你可以编译代码使用

library(Rcpp)
sourceCpp(file="fib.cpp")

# Test
fib(5)
fib(100)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2017-12-06
    • 2016-07-18
    • 1970-01-01
    • 2015-12-27
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多