|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.07.2018, 14:06 | #1 |
Новичок
Джуниор
Регистрация: 14.07.2018
Сообщений: 1
|
Помогите разобраться как работает рекурсия.
Есть такой код, который которая для данного n вычисляет сумму чисел от 1 до n.
Код:
sumTo(4) = 4 + sumTo(3); // 4 + 9 = 13; sumTo(3) = 4 + sumTo(2); // 4 + 5 = 9; sumTo(2) = 4 + sumTo(1); // 4 + 1= 5 sumTo(1) = 1; и в итоге должно получиться 13, но программа считает как 10. Где ошибка? Может должно быть так? sumTo(4) = 4 + sumTo(3); // 4 + 6 = 10; sumTo(3) = 3 + sumTo(2); // 3 + 3 = 6; sumTo(2) = 2 + sumTo(1); // 2 + 1= 3 sumTo(1) = 1; Последний раз редактировалось ЯиТы; 14.07.2018 в 14:13. |
14.07.2018, 14:22 | #2 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
В рекурсии n не меняется, но в функции вызывается эта же функция с уменьшенным на единицу исходным аргументом.
Вот, например, n = 4. Должно получиться 1+2+3+4 = 10. Как работает в данном случае рекурсия. Функция возвращает сумму своего аргумента и значения этой функции, взятой от этого же аргумента, но уменьшенного на 1, либо 1, если аргумент изначально равен 1. имеем: sumTo(4) = 4 + sumTo(3) (*) sumTo(3) = 3 + sumTo(2) sumTo(2) = 2 + sumTo(1) sumTo(1) = 1. Теперь, пользуясь тем, что мы знаем, чему равно sumTo(n) для n = 1..4, подставляем известные значения в строку (*), в итоге получаем sumTo(4) = 4 + 3 + 2 + 1 = 10. Кстати, если у вас в условном операторе используется return, то ветка else для него нужна. Кроме того, всё это условие можно заменить на тернарный оператор, в итоге функция sumTo() будет иметь вид Код:
Последний раз редактировалось Вадим Мошев; 14.07.2018 в 14:25. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите разобраться - не работает файл со скриптом. При загрузке из консоли этот же скрипт работает | Kazik | JavaScript, Ajax | 6 | 27.11.2015 16:09 |
Программма работает, но не так как мне нужно. Помогите разобраться. | shewlett | Помощь студентам | 1 | 30.03.2015 17:25 |
Рекурсия в Паскале, помогите разобраться | Василий_0110 | Помощь студентам | 1 | 18.03.2014 19:26 |
Не пойму как работает рекурсия | googl | Общие вопросы Delphi | 18 | 15.12.2011 20:30 |
Помогите разобраться как это работает! Пожалуйста | Romens | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 08.12.2008 22:16 |