帕斯卡的功能步骤

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)

Rem*_*eau 5

您并没有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的原因。

  • F(4)返回F(3)+ F(2),然后返回F(2)+ F(1))+ 2,然后返回(2 + 2)+ 2是6 (2认同)