М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
andrej1790
andrej1790
01.02.2020 07:34 •  Информатика

:нужно написать рекурсию алгоритмов на языке паскаль. нахождение n-го члена ряда фибоначчи. буду )

👇
Ответ:
sidikreal
sidikreal
01.02.2020
Числа Фибоначчи определяются следующим образом:
F_0=1; \ F_1=1; \ F_n=F_{n-1}+F_{n-2}, \ n\geqslant2, \ n\in \mathbb Z
Для перехода от математической записи к записи, пригодной для алгоритмизации (и программирования), нужно представить число Фибоначчи в виде некоей функции F(n) и уже эту функцию программировать. Такое представление получить в данном случае очень просто.
F(n)=\left\{\begin{matrix}
1 & & n=0,1 \\ F(n-1)+F(n-2) & & n\geqslant2, \ n\in \mathbb Z
\end{matrix}\right.

Поскольку в функции присутствует определение её значения через обращение к ней же, мы можем говорить о рекурсивном определении функции.
Рекурсия программируется либо непосредственно (это быстро, наглядно, но часто сопряжено с большими расходами вычислительных ресурсов), либо путем сведения к итерации (это существенно менее наглядно, может быть затруднено алгоритмически, но эффективно при выполнении). Поскольку в задании говорится о рекурсии, выбираем рекурсивный алгоритм.

1. Очень короткая реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer:=(n<2?1:Fib(n-1)+Fib(n-2));

begin
  Writeln(Fib(ReadInteger('n=')))
end.

Тестовое решение
n= 20
10946

2. Более традиционная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
  if n<2 then Result:=1
  else Result:=Fib(n-1)+Fib(n-2)
end;

begin
  Writeln(Fib(ReadInteger('n=')))
end.

3. Тупо-школьная реализация
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016
function Fib(n:integer):integer;
begin
  if n<2 then Fib:=1
  else Fib:=Fib(n-1)+Fib(n-2)
end;

var
  n:integer;
begin
  Write('n='); Read(n);
  Writeln(Fib(n))
end.

Как хорошо видно, по мере деградации уровня программирования программа становится длиннее, но ни в коем случае ни яснее, ни эффективнее.
4,6(11 оценок)
Открыть все ответы
Ответ:
MashaTears1
MashaTears1
01.02.2020

 

Вопрос 1.

Какие ключевые слова не используются для записи команды ветвления?

and  

Вопрос 2.

Как выглядит полная форма команды ветвления?

if ... then ... else ...

  Вопрос 3.

Как выглядит сокращённая форма команды ветвления?

if ... then ...

Вопрос 4.

Какая из команд записана неправильно?

  if a:=0 then a>0;

 

Вопрос 5.

Какая из команд записана правильно?

if x=0 and a>0 then b:=0 else b:=x;

Вопрос 6.

Какая из команд записана правильно?

if (x=0) and (a>0) then begin b:=0;c:=x; end else b:=x;

 

Вопрос 7.

Что будет напечатано на экране в результате выполнения данного фрагмента программы

a:=6;

if a mod 2 = 0 then write(a+2) else write(a-2);

 8  

Вопрос 8.

Что будет напечатано на экране в результате выполнения данного фрагмента программы

a:=12;

if a div 2 >= 6 then b:=a mod 5 else b:=a div 3;

write(a-b);

 10

 

Вопрос 9.

Что будет напечатано на экране в результате выполнения данного фрагмента программы

a:=22;

if a*a >= 225 then a:=a mod 6

Write(22-a);

 18

 

Вопрос 10.

Вставьте пропущенную логическую операцию так, чтобы значение переменной z после выполнения заданного фрагмента программы стало равным 9

a:=5; b:=8; c:=11;

if (a>b) ... (b

 4 не знаю - ФРАГМЕНТ ПРОГРАММЫ НЕ ДОПИСАН

 

Вопрос 11.

Вставьте пропущенную логическую операцию так, чтобы значение переменной z после выполнения заданного фрагмента программы стало равным 3

a:=15; b:=7; c:=4;

if (a>b) ... (b

4 не знаю - ФРАГМЕНТ ПРОГРАММЫ НЕ ДОПИСАН

 

Вопрос 12.

Вставьте пропущенную логическую операцию так, чтобы значение переменной z после выполнения заданного фрагмента программы стало равным 5

a:=1; b:=8; c:=6;

if (a<=c) ... (b<=c) then z:=c-a else z:=c-b;

2 or
4,4(92 оценок)
Ответ:
ерик12840
ерик12840
01.02.2020

Program summa;

 Uses crt;

 Const m=20;

 Var a:array[1..m] of integer;

     i,s:integer;

 Begin

   For i:=1 to m do

    a[i]:=random(101)-50;

   For i:=1 to m do

    s:=s+a[i];

   If s>50 then writeln('Сумма = ',s) else

    for i:= 1 to m do

      Writeln('Элемент массива №',i,' равен ',a[i]);

 End.

 

или

 

Program summa;

 Uses crt;

 Const m=20;

 Var a:array[1..m] of integer;

     i,s:integer;

 Begin

   For i:=1 to m do

    Readln(a[i]);

clrscr;

   For i:=1 to m do

    s:=s+a[i];

   If s>50 then writeln('Сумма = ',s) else

    for i:= 1 to m do

      Writeln('Элемент массива №',i,' равен ',a[i]);

 End.

4,8(29 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ