2017-04-17 72 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

对不起,是的,循环可以在任何地方开始,是的,这是等效的循环。 –