Задача 5 Урок 20

Задача 5 Урок 20

Пользователь получает на вход целое положительное число N напишите рекурсивную функцию, которая вернет число Фиббоначи стоящии под этим номером

var N,b,a,k : integer;

function Num(N,b,a,k: integer) : integer;
var c: integer;
begin
  k := k + 1;
  if(N = 1) then
    write(0)
  else if((N = 2) or (N = 3)) then
    write(1)
  else
    begin
      c := b;
      b := a + b;
      a := c;
      if (k < N) then
        Num(N, b, a, k)
      else
        write(a + b,' ');
    end;
end;

begin
  readln(N);
  a := 0;
  b := 1;
  k := 3;
  Num(N,b,a,k);
  readln;
end.  
vedro-compota's picture

1) уменьшить количество агрументов

+ под сомнением вот это:

k := 3;

_____________
матфак вгу и остальная классика =)

var N,b,a : integer;

function Num(N,b,a: integer) : integer;
var c: integer;
begin
  if(N = 1) then
    write(0)
  else if(N = 2) then
    write(1)
  else if (N > 3) then
    begin
      c := b;
      b := a + b;
      a := c;
      Num((N-1),b,a);
    end
  else
    begin
      b := a + b;
      writeln(b);
    end;
end;

begin
  readln(N);
  b := 1;
  a := 0;
  Num(N,b,a);
  readln;
end. 
vedro-compota's picture

попробовать использовать решение http://fkn.ktu10.com/?q=node/13493 для функции с одним аргументом (может получится сократить число аргументов в этой задаче)

_____________
матфак вгу и остальная классика =)

var n: integer;
function numFib(n: integer): integer;
begin
  if (n = 0) then
    result: = 0
  else if(n = 1) or (n = 2) then
    result: = 1
  else
    result := numFib(n - 1) + numFib(n - 2)
end;

begin
  readln(n);
  writeln(numFib(n));
  readln();
end.  
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)