2017-04-17 2 views
0

Tout d'abord c'est pour l'école et je ne cherche pas de document à distribuer. Juste des conseils. Je dois écrire une fonction fibonacci en utilisant des outils très basiques.Fibonacci imbriqué?

J'ai ces outils (d'une langue que nous avons écrit en Java):

  • if-else
  • boucle for
  • arithmétique
  • affectation
  • d'imbrication infinie
  • tout nombre d'énoncés.

Le problème est que n'importe quel nid ou instruction ne peut avoir qu'une seule instruction résultante ou imbrication.

Par exemple, cela est correct:

repeat b to 7 by 2 
{ 
    repeat a to 5 by 1 
    { 
    a = a + 1 
    } 
} 

mais ce n'est pas correct:

repeat x to 5 by 1 
{ 
    x = x + 1 
    y = x 
} 

Voici la section pertinente de la grammaire:

<code> ::= <statement> <code> 
<code> ::= <statement> 
<statement> ::= load <string> 
<statement> ::= print <expr> 
<statement> ::= input <var> 
<statement> ::= if <cond> <statement> 
<statement> ::= if <cond> <statement> else <statement> 
<statement> ::= repeat <var> to <val> by <val> 
<statement> ::= <var> = <expr> 
<expr> ::= <val> + <val> 
<expr> ::= <val> - <val> 
<expr> ::= <val> * <val> 
<expr> ::= <val>/<val> 
<expr> ::= <val> 
<cond> ::= <val> == <val> 
<cond> ::= <val> > <val> 
<cond> ::= <val> < <val> 
<val> ::= <num> 
<val> ::= <var> 

je peux » t comprendre comment diable je vais y arriver. La récursivité n'est pas autorisée. Des pointeurs?

Encore une fois, ne cherchez pas la solution, juste des conseils.

Merci beaucoup

+0

affichant la grammaire de la langue rendrait cela plus facile de répondre . –

+0

bon point. Ajoutée. –

+0

est-ce qu'une instruction if-else compte comme une ou deux instructions? – David

Répondre

1

Comme ça? utilise 3 variables qui représentent les 3 derniers nombres de la séquence ?. Ce que vous voulez vraiment, c'est avoir un simple:

a = 0 
b = 1 
repeat x to 5 by 1 
{ 
    c = a + b 
    a = b 
    b = c 
} 

Mais ceci n'est pas autorisé. Cependant, comme si-autre ne compte que 1 déclaration, vous pouvez simplement (ab) utiliser pour faire 3 déclarations en faisant 1 déclaration dans chaque partie d'une répétition:

a = 0 
b = 1 
repeat x to 5 by 1 
{ 
    repeat y to 3 by 1 
    { 
     if y < 2 
     { 
      if y < 1 
      { 
       c = a + b 
      } 
      else 
      { 
       a = b 
      } 
     } 
     else 
     { 
      b = c 
     } 
    } 
} 
+0

Ils ont dit dans la question que plusieurs déclarations ne sont pas autorisées dans un seul bloc. –

+0

Logique fixe. La question suivante est la suivante: les boucles sont-elles basées sur zéro ou basées sur 1? est répété x à 5 par 1 équivalent à for (int x = 0; x <5; x ++)? – David

+0

Désolé, oui, les boucles peuvent commencer n'importe où et oui c'est l'équivalent de la boucle. –