pascal中的函数步骤

问题描述 投票:-4回答:2

我有以下代码,结果是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.
delphi pascal freepascal
2个回答
4
投票

你没有像你声称的那样只添加7+6。如果你想要,你需要改变这一行:

F := F(a-1) + F(a-2);

相反:

F := (a-1) + (a-2);

否则,你实际上是在添加F(7)+F(6),它是:

(F(6) + F(5)) + (F(5) + F(4))

这是:

((F(5) + F(4)) + (F(4) + F(3))) + ((F(4) + F(3)) + (F(3) + F(2)))

等等,每次递归调用F(a) a > 2。这就是为什么你最终得到42而不是13的结果。


-1
投票
function f(a : Integer) : Integer;
begin
   if (a=1) OR (a=2) then
    Result := 2
   else
    Result := (a-1) + (a-2);                                                        
end;

f(8)
Result = 13
© www.soinside.com 2019 - 2024. All rights reserved.