所以我得到了这个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
使用此算法,您需要完成以下任务:
我。假装是处理器并使用讲座中讲授的代码演练技术执行上述算法。为此目的设计您自己的测试数据,并解释该算法的作用。
答案 0 :(得分:0)
对于前三个if
语句,它确实:
对于最终的else
,for 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
您可能会看到sum
是Fibonacci number:
让我们通过追加来完成分析: