2017-10-02 7 views
0

Quelle modification est nécessaire pour que la fonction renvoie une séquence sans le numéro 1 dupliqué?Fonction Fibonacci du livre "Le Livre de R"

myfib<- function(){ 
     fib.a<-1 
     fib.b<- 1 
     cat(fib.a,", ",fib.b,",",sep="") 
     repeat{ 
       temp<- fib.a+fib.b 
       fib.a<-fib.b 
       fib.b<-temp 
       cat(fib.b,", ", sep="") 
       if(fib.b>150){ 
         cat("BREAK NOW...") 
         break 
       } 
     } 
} 

au lieu de 1, 1, 2, 3, 4, 8, 13, 21, 34, 55, 89, 144, 233, pause ...

retour 1, 2 , 3, 4, 8, 13, 21, 34, 55, 89, 144, 233, pause ...

+3

Pourquoi voudriez-vous faire cela? La séquence de Fibonacci est censée commencer '1, 1, ...' (ou dans certaines représentations, '0, 1, 1, ...'). – neilfws

+2

Vraiment ?? J'étais sur le point de répondre, jusqu'à ce que je voyais que * vous êtes explicitement «chat» le premier 1 *. Changez simplement votre première sortie en utilisant 'cat'. (Je suis d'accord avec neilfws, cependant, l'appeler "la séquence de Fibonacci" et omettre le premier "1" est inexact.) Pour l'anecdote, cette fonction ne renvoie rien, donc votre question "renvoie une séquence" est fausse.) – r2evans

+2

Shouldn 't le '4' dans vos listes soit' 5'? –

Répondre

0

Supprimer le premier nombre de votre cat:

myfib <- function() { 
    fib.a <- 1 
    fib.b <- 1 
    cat(fib.b, ", ", sep="") 
    repeat { 
     temp <- fib.a + fib.b 
     fib.a <- fib.b 
     fib.b <- temp 
     cat(fib.b, ", ", sep="") 
     if(fib.b > 150) { 
      cat("BREAK NOW...") 
      break 
     } 
    } 
} 

ou modifier les valeurs initiales :

myfib <- function() { 
    fib.a <- 1 
    fib.b <- 2 
    cat(fib.a, ", ", fib.b, ", ", sep="") 
    repeat { 
     temp <- fib.a + fib.b 
     fib.a <- fib.b 
     fib.b <- temp 
     cat(fib.b, ", ", sep="") 
     if(fib.b > 150) { 
      cat("BREAK NOW...") 
      break 
     } 
    } 
}