|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.09.2017, 20:20 | #1 |
Пользователь
Регистрация: 27.08.2017
Сообщений: 99
|
[РЕШЕНО] Рекурсивная функция. Помогите понять
Вторые сутки мозг ломаю. Говорят:"Надо отдохнуть и на свежую голову всё встанет на свои места". Не встало...ещё хуже стало понимание.
Вод код. Код:
Но, что происходит в каждой строчке сначала вроде понимал, а на данный момент вообще выпал. Функции sequenceSum присвоили аргументы begin - 1, end - 5. Взяли эти аргументы и спустились к телу функции, в частности к if где происходит сравнение типов и значений где оно undefined. Опускается к следующему условию где если begin больше end то оно будет NaN, оно тоже undefined, что в следующей строке и далее до конца происходит мне уже непонятно... Понятно, что тоже самое будет происходить с каждой цифрой по порядку до 5. Далее подъём наружу и всё... Мозг здесь снова виснет. Пожалуйста помогите. Разложите мне всё по порядку на понятном языке для начинающего который кроме html и css ни чего не нюхал... Очень надо понять... Заранее благодарен. С Наилучшими пожеланиями! |
22.09.2017, 20:46 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Это ваш код или пример? Вроде ж он не работает (не возвращает результат). В последнем else что-то странное, наверно return пропущен.
Код:
Первый if — условие завершения рекурсии. Второй — видимо на случай неправильных входных данных (5 и 1). А если ни один из них не "сработал", то вернет begin + сумма от begin+1 до конца. Может быть будет понятнее если заметить, что sequenceSum(5, 5) вернет 5 (сразу первый if и все), а sequenceSum(4, 5) вернет 4 + sequenceSum(5, 5)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 02.10.2017 в 17:19. |
22.09.2017, 21:47 | #3 | |
Пользователь
Регистрация: 27.08.2017
Сообщений: 99
|
Цитата:
Код:
sequenceSum(1, 5); // 1 + 2 + 3 + 4 + 5 = 15 sequenceSum(4, 10); // 4 + 5 + 6 + 7 + 8 + 9 + 10 = 49 sequenceSum(-3, 2); // (-3) + (-2) + (-1) + 0 + 1 + 2 = -3 Соответственно известным было Код:
Я вроде реализовал её самостоятельно на каком-то интуитивном уровне, но мне хочется понять, что происходит в последнем else (какой порядок вычислений, ну ни чего у меня не сходится)... Понятно, что на поверхности мы видим только последний return. Когда у нас begin и end будут равны пяти. И для чего нужен последний else if (его я подглядел в вопросах и ответах) он ведь в этом коде вроде ни когда не реализуется. Если очевидно, что цели не достижимы - корректируйте не цели, корректируйте действия. Конфуций. |
|
22.09.2017, 21:55 | #4 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Я вот тоже думаю, что return пропущен.
gryllus, вообще, если в if используется инструкция return, то else писать незачем - это ненужные код. В таких случаях надо просто завершить условный оператор, а далее писать тот же код, который ранее был записан в ветке else. Также, обратите внимание, что, стрелочные функции автоматически возвращают значение только том случае, если её инструкции не заключены в фигурные скобки. Если вы заключаете тело функции в фигурные скобки, и хотите, чтобы она возвращала значение, то используйте инструкцию return. С учётом всего этого, я переписал бы ваш код так Код:
Последний раз редактировалось Вадим Мошев; 22.09.2017 в 21:58. |
22.09.2017, 21:57 | #5 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
Может быть там автоматические тесты есть на это. (их там можно посмотреть в одном из доступных в среде файлов) Так я ж говорю, подумайте сначала что происходит при вызове sequenceSum(5, 5), потом при sequenceSum(4, 5), и должно стать понятно )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
22.09.2017, 22:15 | #6 | |
Пользователь
Регистрация: 27.08.2017
Сообщений: 99
|
Цитата:
Код:
...а sequenceSum(3, 5) вернёт 3 + sequenceSum(4, 5) - здесь вроде всё ясно. Сумма-то вычислится(или + это не сумма, а унарный оператор или ещё, что нибудь чего я пока не знаю) или нет вот что не понятно - будет какое-то значение? sequenceSum(3, 5) вернёт 3 + sequenceSum(3 + 1, 5) => вернёт 3 + sequenceSum(4 , 5) Последний раз редактировалось Вадим Мошев; 22.09.2017 в 22:33. |
|
22.09.2017, 22:31 | #7 |
Старожил
Регистрация: 12.11.2010
Сообщений: 8,568
|
Да, он называется так. Ещё встречал такое определение - "Арифметический условный оператор"
gryllus, используйте кнопку "Правка", чтобы дополнить своё последнее сообщение (если новых не ваших нет), а не дописывайте новые. |
22.09.2017, 22:42 | #8 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
сумма
непонятно что? Будет begin + то, что вернет тот вызов sequenceSum. (вычисляется сначала оно, а потом сумма, то есть просто сумма двух чисел)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
22.09.2017, 22:43 | #9 |
Пользователь
Регистрация: 27.08.2017
Сообщений: 99
|
Код:
Код:
|
22.09.2017, 22:49 | #10 |
Пользователь
Регистрация: 27.08.2017
Сообщений: 99
|
Вот теперь всё понятно... Десять тысяч вам СПАСИБО!!!
чему else if не дал реализоваться Код:
Последний раз редактировалось gryllus; 22.09.2017 в 22:52. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ Рекурсивная функция | Krab_npopok | Помощь студентам | 9 | 26.12.2013 23:45 |
Рекурсивная функция | --1990Артём | Помощь студентам | 1 | 09.12.2012 10:21 |
Рекурсивная функция C++ | Buryy_Mishka | Помощь студентам | 0 | 31.05.2010 00:27 |
Рекурсивная функция | Skinnyman | Помощь студентам | 4 | 16.03.2010 18:05 |