Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2017, 14:04   #1
Милена1
Новичок
Джуниор
 
Регистрация: 09.02.2017
Сообщений: 2
По умолчанию Найдите сумму чисел, которые будут выведены при вызове F1. рекурсивный алгоритм

Дан рекурсивный алгоритм:
procedure F(n: integer);
begin
writeln(n);
if n < 6 then begin
writeln(n);
F(n+2);
F(n+3);
F(n*3)
end
end;
Найдите сумму чисел, которые будут выведены при вызове F(1).
Милена1 вне форума Ответить с цитированием
Старый 09.02.2017, 14:50   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Таки в чем проблема? Возьмите листочек и выпишите их...
p51x вне форума Ответить с цитированием
Старый 09.02.2017, 16:42   #3
Милена1
Новичок
Джуниор
 
Регистрация: 09.02.2017
Сообщений: 2
По умолчанию

)G(n)=>6=n
G(n)=n+G(n+2)+G(n+3)+G(n*3)
G(1)=1+G(3)+G(4)+G(3)
G(3)=3+G(5)+6+9
G(4)=4+6+7+12=29
G(5)=5+7+8+15=35
G(3)=3+35+6+9
G(1)=1+53+29+53=136

Где ошибки???
Милена1 вне форума Ответить с цитированием
Старый 09.02.2017, 16:59   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
G(1)=1+53+29+53=136
Что это? По какой формуле считали? Так какие числа выведет функция для параметра 1?
p51x вне форума Ответить с цитированием
Старый 09.02.2017, 17:32   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
procedure F(n: integer);
begin
  writeln(n);
  if n < 6 then begin
     writeln(n);
...
и ещё, обратите внимание, любое число выводится в начале процедуры,
а если оно меньше шести, то оно же выводится ЕЩЁ РАЗ (второй WriteLn )

но в остальном логика расчётов верная.
F(5) выведет 5 5 7 8 15 сумма = 40
F(4) выведет 4 4 6 7 12 сумма = 33
F(3) ..... сумма = 61

Последний раз редактировалось Serge_Bliznykov; 09.02.2017 в 17:40.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.02.2017, 18:27   #6
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде забацал (правда в С++, но это дело не меняет):
6.jpg

Твоя задача - проанализировать цифры (в чёрном экране). Т.е. сказать когда выводит то или иное число... А что значит: "Найдите сумму чисел"? Переделать программу чтобы общую сумму подсчитало?
Кстате, у тебя вроде дублирование произошло (ну например "1,1" или "4,4")?

Могу ошибаться, но мне кажется здесь ошибка: два вывода. Я думаю, нужно либо первый вывод "n" (но скорей всего второй).

Последний раз редактировалось ura_111; 09.02.2017 в 20:06.
ura_111 вне форума Ответить с цитированием
Старый 09.02.2017, 19:40   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Возьми большой лист бумаги и разрисуй все вызовы и возвраты функций (с контролем основных параметров конечно). Вот я начал:

9.jpg

p.s.1: сопоставь первые выводы в квадратиках (я их подписал - вывод такой-то или такой-то) и информацию в чёрном окне консоли. Совпадают ли?

Твоя задача - нарисовать всю простыню (все рекуррентные вызовы и возвраты функций). Задача будет считаться решена когда последняя стрелка (зелёная - что означает возврат) вернётся в "1-ю функцию F(1), в конец", т.е. сюда:
Код:
		F(n * 3);
	}
}
А сейчас зелёная стрелка, если ты обратишь своё внимание, вернулась в "3-ю функцию F(n + 2)", т.е. следующую функцию (под номером №5) надо рисовать от 3-й и с вызова "F(n + 3)". Потом "она погуляет и вернётся в конец F(n + 3)". После чего идёт вызов "F(n * 3)". Потом погуляет и вернётся в конец "F(n * 3)". И только после этого можно возвращать во 2-ю функцию "F(n + 2)". Потом из 2-й функцию идёт вызов "F(n + 3)"...........
Очень, очень много квадратиков.

p.s.2: обращай внимание на условие "if n < 6 then begin". Когда оно "НЕТ", тогда идёт возврат на ступеньку выше (смотри на 4-ю функцию)... Возврат, на ступеньку выше, также происходит когда выполнение программы доходит до конца i-й функции, т.е. сюда:
Код:
	}
}

Последний раз редактировалось ura_111; 09.02.2017 в 20:26.
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найдите сумму: а)квадратов целых чисел от 10 до 20,б)чисел, обратных квадратам первых 100 натуральных. 10.найдите сумму в первых ч макс789 Помощь студентам 1 29.05.2016 17:42
Какие значения будут выведены на экран?(С++) Dolilla Помощь студентам 2 05.06.2011 21:41
Запросите у пользователя положительное число А и найдите сумму всех натуральных чисел из промежутка [1,A] white_angel73 Паскаль, Turbo Pascal, PascalABC.NET 13 22.04.2010 23:35
найти сумму чисел, которые не попадают в интервал [с, d]. Krazier Помощь студентам 4 05.02.2010 13:37
двузначные числа которые при умножении на 3 будут заканчиваться на цифру 4 Ases_51 Паскаль, Turbo Pascal, PascalABC.NET 4 13.01.2008 11:37