2017-04-17 115 views
0

首先,這是爲了學校,我不是在尋找一份講義。只是指導。 我需要使用非常基本的工具編寫斐波那契函數。嵌套斐波納契?

我有這些工具(從我們用Java寫了一個語言):

  • 的if-else
  • for循環
  • 算術
  • 分配
  • 無限嵌套
  • 任何報表數量。

問題是任何嵌套或語句只能有一個結果語句或嵌套。

例如,這是好的:

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

,但這是不行的:

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

這裏是語法的相關部分:

<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> 

我可以」弄清楚我將如何完成這件事。遞歸是不允許的。 任何指針?

再次,不尋找解決方案,只是指導。

非常感謝

+0

張貼語言的語法將使這比較容易回答。 –

+0

好點。添加。 –

+0

做一個if-else語句作爲一個或兩個語句計數? – David

回答

1

是否這樣?使用代表序列最後3個數字的3個變量?你真正想要的是有一個簡單的:

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

但這是不允許的。然而,因爲如果其他計爲1條語句,你可以簡單地(AB)使用這一功能,在重複的每個部分做1個語句來完成3個語句:

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

他們在問題中表示,在一個塊中不允許多個語句。 –

+0

固定邏輯。接下來的問題是循環爲零還是基於1?對於(int x = 0; x <5; x ++),重複x至5 x 1等價於? – David

+0

對不起,是的,循環可以在任何地方開始,是的,這是等效的循環。 –