0

我正在尝试制作打印低于用户给定值(n)的斐波那契序列值的函数。所以输入 8 将返回值 (1,1,2,3,5,8)

Fib<-  function(n){
 v=NULL
 v[1]<-1
 v[2]<-1 
 for(i in 3:n){
     v[i]<-v[i-1]+v[i-2]
     while(v[i]<=n){
         print(v)
         break}}}

输入

fib(8)
[1] 1 1 2
[1] 1 1 2 3
[1] 1 1 2 3 5
[1] 1 1 2 3 5 8

我只想打印最后一个。我也尝试过,append(v,v[i])但没有得到它的工作,所以它只会返回低于 n 的值。将不胜感激给出的任何提示。

4

2 回答 2

0

您只能在不间断地使用一个来达到它:

Fib<-  function(n){
  v=NULL
  v[1]<-1
  v[2]<-1 
  i<-2
  while(v[i]<=n)
  {
    i<-i+1
    v[i]<-as.numeric(v[i-1])+as.numeric(v[i-2])
  }
  print(v[1:length(v)-1])
}

这是您想要的输出:

Fib(8)
[1] 1 1 2 3 5 8
于 2020-08-24T12:27:39.370 回答
0

You can try a recursive approach (if you want, you can modify this to let the limit be an input, but I like it better this way to conserve stack space ):

V = c(1,1)
Limit = 10

fib = function(n){
        if(n > L){
          print(V)
          return()
        }else{
          n = V[(length(V)-1) : length(V)] %>% sum
          V <<- c(V,n)
          return(fib(n))
        }
}
fib(0)
于 2020-08-24T12:38:41.007 回答