了解ADL中的for循环

时间:2013-12-23 21:18:59

标签: algorithm for-loop

所以我得到了这个ADL代码,并要求通过使用不同数字输入的代码来呈现结果测试表。 我理解其中的大部分内容,但是从[开始到]结束我一直在努力。

这是我到目前为止所得到的:    对于任何负值,代码在第一个if语句之后结束,并且不显示任何内容。    对于任何0值,代码在第二个if语句之后结束。   对于任何1值,代码在第三个if语句之后结束。 任何帮助将不胜感激。

考虑用ADL编写的以下算法:

procedure unknown(IN number, OUT result, OUT status)

  declare i, number1, number2, sum

  status <-- true
  if number < 0 then [status <-- false]
  else
    if number = 0 then [result <-- 0]
    else
      if number = 1 then [result <-- 1]
      else
        **[number2 <-- 0
         number1 <-- 1
         for i <-- 2 to number do
           sum <-- number1 + number2
           number2 <-- number1
           number1 <-- sum
         end
         result <-- sum
        ]**
      endif
    endif
  endif
end // unknown

使用此算法,您需要完成以下任务:

我。假装是处理器并使用讲座中讲授的代码演练技术执行上述算法。为此目的设计您自己的测试数据,并解释该算法的作用。

1 个答案:

答案 0 :(得分:0)

对于前三个if语句,它确实:

  • 如果输入&lt; 0,然后status = false;
  • 如果输入= 0,则输出= 0;
  • 如果输入= 1,则输出= 1;

对于最终的elsefor i <--2 to number do语句意味着重复执行(数字-1)次的主体i是2,3,4,...,一个一个,所以你得到i的(数字1)。身体是:

sum <-- number1 + number2
number2 <-- number1
number1 <-- sum

让我们看看每次迭代后(在i = 2,3,4之后的ada,......),这些变量会是什么:

i       number1     number2     sum
========================================
begin   1           0           N/A
2       1           1           1
3       2           1           2
4       3           2           3
5       5           3           5
6       8           5           8
7       13          8           13
8       21          13          21

您可能会看到sumFibonacci number

enter image description here

让我们通过追加来完成分析:

  • 如果input = n(n> 1),则输出= Fibonacci编号Fn。