Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归函数R的输出_R - Fatal编程技术网

递归函数R的输出

递归函数R的输出,r,R,我试图在R中编写一个简单的递归函数,每次只返回一个数字。基本上,我想把它们存储在一个列中。所以我一开始是这样宣布的 relevant=c(代表(0,16)) 如果它满足一些条件,我想改变 相关[j]到1。 如果(某物==1){ 相关[j]=1 } 但是当我调用函数外部的相关函数时,所有的值都是0。标准肯定得到了满足,但它似乎没有改变值 任何帮助都将不胜感激 这里有一个“足够简单的递归函数”,它将返回一个数字向量,每个数字都在函数中计算: serf <- function(x){

我试图在R中编写一个简单的递归函数,每次只返回一个数字。基本上,我想把它们存储在一个列中。所以我一开始是这样宣布的
relevant=c(代表(0,16))
如果它满足一些条件,我想改变 相关[j]到1。
如果(某物==1){
相关[j]=1
}

但是当我调用函数外部的相关函数时,所有的值都是0。标准肯定得到了满足,但它似乎没有改变值

任何帮助都将不胜感激

这里有一个“足够简单的递归函数”,它将返回一个数字向量,每个数字都在函数中计算:

serf <- function(x){
            if (length(x)==5) {
              return(x)
            } else {
               x <- c(x, x[length(x)]+1) ; serf(x)
            }
        }


serf(1)
#[1] 1 2 3 4 5

serf我不完全清楚您想要做什么,但我将其解释为具有一个递归函数,返回单个值,并希望将递归调用的结果作为副作用进行累加

下面是一个基于斐波那契数计算的示例,它使用闭包解决了这个问题。有几点需要注意:(1)这是一种非常低效的计算斐波那契数的方法。(2) 在R中,建立类似
元素的对象效率很低;如果您事先知道结果的长度,那么最好将对象初始化为该长度,然后索引到其中

> makefib <- function(){
+   values <- vector("numeric")
+   function(n){
+     if (n == 0) return(values)
+     res <- if (n < 3) 1 else Recall(n - 1) + Recall(n - 2)
+     values[length(values) + 1] <<- res
+     res
+   }
+ }   

> fib <- makefib()
> fib(6)
 [1] 8
> fib(0)
 [1] 1 1 2 1 3 1 1 2 5 1 1 2 1 3 8

>makefib请添加您的“足够简单的递归函数”和所需的输出(您可以查看以帮助您修改您的问题,以便我们更容易回答它)试图澄清一点,但如果仍然不清楚,请告诉我下面的答案对您有帮助吗?如果没有,你能解释一下原因吗?我仍然不清楚您到底想做什么:经过进一步的解释,我看不出哪里需要递归函数(甚至函数)。请添加您的实际函数和您期望的输出