Урок 21.Рекурсия. Задачи 1-7

Урок 21. Задачи 1-7

Задача 1 Дано целое положительное число N. Выведите на экран все число от N до 1 (по убыванию).

program recursion2;
 var d : integer;

  function digits(d: integer): integer;
  begin
      if(d <> 0) then
      begin
         writeln(d);
         digits := (digits(d - 1));
      end;
  end;
begin
  write(digits(4));
  readln();
end.
Задача 2 Дано целое положительное число N. Выведите на экран все число от 1 до N (по возрастанию).
program recursion2;
 var n : integer;

 procedure numbers(n,m: integer);
  begin
      if(n <= m - 1 ) then
      begin
         writeln(n + 1);
         numbers(n + 1, m);
      end
  end;
begin
  numbers(0,12);
  readln();
end. 
Задача 3 Дано целое положительное число A и целое положительно число B. Выведите на экран все числа, расположенные между между ними.
<pre class="brush: delphi">program recursion3;
 var d : integer;

  function numbers(n,m: integer): integer;
  begin
      if(n < m - 1) then
      begin
        writeln(n + 1);
        numbers := (numbers(n + 1, m));
      end;
  end;
begin
  numbers(3,9);
  readln();
end.</pre>
Задача 4 Дано целое положительное число N, вычислите N! (эн факториал)
var n : integer;

 function factorial(n: integer): integer;
 begin
     if(n = 1 ) then
     begin
        factorial := n;
     end
     else
     begin
        factorial := n * factorial(n - 1);
     end;
 end;
begin
    write(factorial(4));
    readln();
end.
Задача 5 Пользователь получает на вход целое положительное число N напишите рекурсивную процедуру, которая выведет все числа Фиббоначи от первого до N-ого
program recursion6;
 var n, m, h, k, l : integer;

  function fibonaci(n, m, h: integer): integer;
  begin
      k := 0;
      if(n = 1) then
      begin
        writeln(n);
        fibonaci := n;
      end
      else if(m = 1) then
      begin
        k := m;
        writeln(m);
        writeln(k);
        k := 0;
        l := 1;
        h := 1;
      end
      else
      begin
        l := 0;
        writeln(m);
        k := h;
        h := m;
      end;
      if(n > m) and (h + k <= n)then
        fibonaci := fibonaci(n, m + l + k, h);

  end;
begin
  fibonaci(10, 1, 0);
  readln();;
end.  
Задача 6 Пользователь получает на вход целое положительное число N напишите рекурсивную функцию, которая вернет число Фиббоначи стоящии под этим номером
program recursion7;
 var n : integer;

  function fibonaci(n: integer): integer;
  begin
      if(n = 1) then
      begin
         fibonaci := 0;
      end
      else if (n = 2) then
      begin
         fibonaci := 1;
      end
      else
      begin
         fibonaci := fibonaci(n-1) + fibonaci(n-2);
      end;
  end;
begin
    write(fibonaci(9));
    readln();
end.
Задача 7 Дано натуральное число N. Вычислите сумму его цифр.
program recursion5;
 var n, k, r : integer;

  function summa(n, r: integer): integer;
  begin
      if(0 < n) then
      begin
         k := n mod 10;
         n := n div 10;
         r += k;
         summa := summa(n,r);
      end
      else
      begin
         summa := r;
      end;
  end;
begin
    writeln(summa(10020030, 0));
    readln();
end.

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

Задача 2 Дано целое положительное число N. Выведите на экран все число от 1 до N (по возрастанию)

--решить с одной переменной

Задача 5 Пользователь получает на вход целое положительное число N напишите рекурсивную процедуру, которая выведет все числа Фиббоначи от первого до N-ого

-попробовать уменьшить количество переменных

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