Cla*_*rys -3 delphi pascal freepascal
我有以下代码,结果是42,但是为什么呢?答案必须是13,因为7+6=13。
program HelloWorld;
function F (a : integer) : integer;
begin
if (a = 1) or (a = 2) then
F := 2
else
F := F(a-1) + F(a-2);
end;
begin
WriteLn(F(8));
end.
Run Code Online (Sandbox Code Playgroud)
您并没有7+6像声称的那样添加。如果需要,您需要更改此行:
F := F(a-1) + F(a-2);
Run Code Online (Sandbox Code Playgroud)
为此:
F := (a-1) + (a-2);
Run Code Online (Sandbox Code Playgroud)
否则,您实际上是在添加F(7)+F(6),即:
(F(6) + F(5)) + (F(5) + F(4))
Run Code Online (Sandbox Code Playgroud)
这是:
((F(5) + F(4)) + (F(4) + F(3))) + ((F(4) + F(3)) + (F(3) + F(2)))
Run Code Online (Sandbox Code Playgroud)
等等,对于每个对F(a)where的递归调用a > 2。这就是为什么最终结果为42而不是13的原因。
| 归档时间: |
|
| 查看次数: |
199 次 |
| 最近记录: |