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

Дан рекурсивный алгоритм: def F(n):
if n > 0:
print('*')
F(n-2)
F(n-1)
F(n-1)
print('*')
Сколько символов "звездочка" будет напечатано на экране при выполнении
вызова F(5)?

👇
Ответ:
Aydan666
Aydan666
02.01.2023

98

Код для собственной проверки:

def F(n):

if n > 0:

print('*')

F(n-2)

F(n-1)

F(n-1)

print('*')

if __name__ == "__main__":

F(5)

4,6(44 оценок)
Ответ:
nif4
nif4
02.01.2023

Вся сложность рекурсивных алгоритмов заключается в том, что внутри одной функции запустится другая.

Запускается F(5)

n>0? 5>0? - Да.

Выводится звёздочка, Запускается F(3), потом F(4), потом F(4) и снова выводится звёздочка (если все эти команды под условие попадают, а то у вас табуляция не расставлена)

На данный момент мы имеем 2 звёздочки и ещё 3 функции, которые должны быть выполнены.

Начнём с F(3)

3>0? Да. Тогда:

Выводится звёздочка, Запускается F(1), потом F(2), потом F(2) и снова выводится звёздочка

Уже 4 звёздочки

Нам осталось 2 раза выполнить F(2) (результаты у них будут одинаковые)

2 раза F(4) и F(1)

Запустим F(1):

1>0? Да.

Выводится звёздочка, Запускается F(-1), потом F(0), потом F(0) и снова выводится звёздочка

Звёздочек 6.

F(-1): -1>0? Нет. Ничего не делаем

F(0): 0>0? Нет. Ничего не делаем

F(2):

2>0

Выводится звёздочка, Запускается F(0), потом F(1), потом F(1) и снова выводится звёздочка

Уже 8 звёздочек

И 2 раза выводим F(1), а каждое F(1) даёт нам по 2 звёздочки

Итог: 12 звёздочек.

F(2) надо выполнить 2 раза, то бишь ещё 6 звёздочек, итог 18

Осталось 2 раза выполнить F(4)

4>0

Выводится звёздочка, Запускается F(2), потом F(3), потом F(3) и снова выводится звёздочка

20 звёздочек + 6 от F(2) + 16 от F(3) + 16 от F(3) = 58 звёздочек

F(4) выполняем второй раз 58+40=98 звёздочек - ответ

В дополнение прикреплю визуальное решение, оно должно быть попроще:


Дан рекурсивный алгоритм: def F(n):if n > 0:print('*')F(n-2)F(n-1)F(n-1)print('*')Сколько символо
Дан рекурсивный алгоритм: def F(n):if n > 0:print('*')F(n-2)F(n-1)F(n-1)print('*')Сколько символо
4,5(40 оценок)
Открыть все ответы
Ответ:
Zanyt
Zanyt
02.01.2023
Procedure GetWord(s:string; var p:integer; var w:string; delim:string:=' ');
{
 Получает в w слово из строки s, которое начинается не ранее позиции p.
 Возвращает новое значение p, указывающее на первый разделитель delim,
 который следует за найденным словом или 0, если такой разделитель не найден.
 По умолчанию слова разделяются не менее чем одним пробелом
}
var
  i,n:integer;
  fBreak:boolean; { флажок для прерывания циклов }
begin
  n:=Length(s); fBreak:=False;
  {ищем первый символ, отличный от разделителя - начало слова }
  while ((p<=n) and (not fBreak)) do
    if (p=n) or (s[p]<>delim) then fBreak:=True
    else Inc(p);
  { ищем очередной разделитель - конец слова }
  if p<n then begin
    i:=p; Inc(p); fBreak:=False;
    while (p<=n) and (not fBreak) do begin
      if (p=n) or (s[p]=' ') then fBreak:=True else Inc(p)
    end;
  { теперь слово находится между позициями i и p }
  w:=Copy(s,i,p-i)
  end;
  if p>=n then p:=0
end;

function CountG(w:string):integer;
{ возвращает количество гласных в слове w}
var
  i,k:integer;
begin
  k:=0;
  for i:=1 to length(w) do
    if w[i] in ['а','е','ё','и','о','у','ы','э','ю','я'] then Inc(k);
  CountG:=k
end;

var
  s,w,wmax:string;
  p,k,gmax:integer;
begin
  Writeln('Введите текст, разделяя слова пробелами');
  Readln(s);
  s:=LowerCase(s);
  p:=1; gmax:=0;
  while p>0 do begin
    GetWord(s,p,w);
    k:=CountG(w);;
    if gmax<k then begin gmax:=k; wmax:=w end
  end;
  if gmax>0 then Writeln('В слове "',wmax,'" максимум гласных, равный ',gmax)
  else Writeln('Во введенной строке гласных букв не найдено')
end.
4,4(28 оценок)
Ответ:
DenJeys
DenJeys
02.01.2023
               цена     незн.   цветик     тороп.    док.
пароход   2         50км      100км      -          60км
поезд       1         40км       20км    10км      30км
самолёт    4         100км      -         200км

50+40+100=190 км проехал незнайка
100+20=120км проех.цветик
10+200=210км проех тороп.            всего 190+120+210+90=610 км
60+30= 90км проех доктор

50х2+40+100х4=100+40+400=540 коп.=5руб 40 коп - нейзнайка
100х2+20=220 коп=2руб 20коп-  цветик
10+200х4 = 810 коп=8руб 10коп - торопыжка
  60х2+30=150коп=1руб 50коп - доктор
всего 540+220+810+150=1720 коп = 17руб 20коп
4,6(8 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ