|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.02.2017, 14:04 | #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). |
09.02.2017, 14:50 | #2 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Таки в чем проблема? Возьмите листочек и выпишите их...
|
09.02.2017, 16:42 | #3 |
Новичок
Джуниор
Регистрация: 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 Где ошибки??? |
09.02.2017, 16:59 | #4 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
|
|
09.02.2017, 17:32 | #5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
а если оно меньше шести, то оно же выводится ЕЩЁ РАЗ (второй 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. |
|
09.02.2017, 18:27 | #6 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Вроде забацал (правда в С++, но это дело не меняет):
6.jpg Твоя задача - проанализировать цифры (в чёрном экране). Т.е. сказать когда выводит то или иное число... А что значит: "Найдите сумму чисел"? Переделать программу чтобы общую сумму подсчитало? Кстате, у тебя вроде дублирование произошло (ну например "1,1" или "4,4")? Могу ошибаться, но мне кажется здесь ошибка: два вывода. Я думаю, нужно либо первый вывод "n" (но скорей всего второй). Последний раз редактировалось ura_111; 09.02.2017 в 20:06. |
09.02.2017, 19:40 | #7 |
Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
|
Возьми большой лист бумаги и разрисуй все вызовы и возвраты функций (с контролем основных параметров конечно). Вот я начал:
9.jpg p.s.1: сопоставь первые выводы в квадратиках (я их подписал - вывод такой-то или такой-то) и информацию в чёрном окне консоли. Совпадают ли? Твоя задача - нарисовать всю простыню (все рекуррентные вызовы и возвраты функций). Задача будет считаться решена когда последняя стрелка (зелёная - что означает возврат) вернётся в "1-ю функцию F(1), в конец", т.е. сюда: Код:
Очень, очень много квадратиков. p.s.2: обращай внимание на условие "if n < 6 then begin". Когда оно "НЕТ", тогда идёт возврат на ступеньку выше (смотри на 4-ю функцию)... Возврат, на ступеньку выше, также происходит когда выполнение программы доходит до конца i-й функции, т.е. сюда: Код:
Последний раз редактировалось ura_111; 09.02.2017 в 20:26. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Найдите сумму: а)квадратов целых чисел от 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 |