Вопрос №55233 от пользователя Сергей в уроке «Итеративный процесс», курс «Введение в программирование»

Сергей

подскажите мы должны как то определять acc в задаче? какой нибудь константой или функцией? 3 день сижу не хочу лезть в подсказку. для чего вообще нужно подставлять acc - читаю обсуждения и похоже все понимают, для чего оно кроме меня. оно вшито в решении задачи?

19 0

Maksim Litvinov

Константа acc - это аккумулятор, он хранит текущий результат и помогает передать его дальше. Вы должны задать первоначальное значение аккумулятора, вызвав с ним внутреннюю рекурсивную функцию. Посмотрите в теории на пример с факториалом. Можете отправить свое решение (что у вас сейчас получается) на ревью и выложить ссылку? Подробнее о ревью: https://help.hexlet.io/ru/articles/111135-kod-revyu

0

Сергей

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

0

Maksim Litvinov

Сергей, попробуйте прямо здесь описать словами, по шагам, алгоритм решения этой задачи. Так вам самому будет проще выстроить в голове все мысли

0

Сергей

есть число которое больше 0. то что число делится на само себя - нам не нужно. далее перебираем все числа, которые при делении выдают целое число и выводим самое меньшее в ответ

0

Сергей

немного подсмотрел решение в инет, поскольку мысль есть, не получается выразить в код

0

Maksim Litvinov

Посмотрите на вывод тестов:

    Expected: 3
    Received: undefined

Как думаете, в каком случае функция возвращает undefined? Посмотрите в теории урока, что должна возвращать внешняя функция. Также обратите внимание, что если число не делится нацело на делитель, остаток от деления может быть не только меньше, но и больше нуля.

0

Сергей

уже начинаю врубаться так, вроде как понял про базовый результат, прописал сценарии, но ругается на "инвалидную левую часть", что-то с синтаксисом

0

Maksim Litvinov

Сергей, вернитесь к шестой версии ревью, это решение близко к истине. Вам нужно только поправить два момента:

  1. Вернуть из основной функции вызов внутренней рекурсивной функции с начальным значением делителя (посмотрите пример в теории).
  2. Разобраться с проверкой на то, что число делится нацело на делитель. Сейчас есть проверка только на то, что остаток от деления меньше нуля. Можно проверить, что остаток от деления не равен нулю, и эта проверка покроет оба случая: и когда остаток больше нуля и когда меньше
0

Maksim Litvinov

Вы скидываете ссылку на само упражнение, а не на код-ревью. Если актуальной сейчас является 11 версия ревью, то вынужден повторить свой предыдущий комментарий. Шестая версия ревью наиболее близка к правильному решению. Поправьте два момента, которые я описал в предыдущем комментарии, и код заработает.

0

Сергей

Максим Литвинов, я вернулся к 6 превью, посмотрел еще раз урок насчет каунтер и acc. Возможно ли, что мне нужно ввести в итер еще один аргумент для сохранения результата от вычисления (num % delitel)? понимаю что это запоздалая мысль, но все таки... просто тогда вся наработка идет коту под хвост

0

Сергей

хм и 13 ревью, какое ближе

0

Maksim Litvinov

Сергей, вы уходите в дебри. Почему вы не хотите взять за основу шестую версию. Просто скопируйте её и поправьте моменты, которые я вам подсказал.

  1. Нужно поправить второе условие. Если остаток от деления числа на делитель не равен нулю, то вызываем iter со следующим делителем delitel + 1. Если остаток от деления не равен нулю, значит число нацело не делится, пробуем следующий делитель.
  2. В конце из основной функции smallestDivisor нужно вернуть вызов iter с начальным делителем 2. Мы же должны начать делить с какого-то числа.
0

Сергей

Максим Литвинов, нашел же решение но почему то не работает. может ошибка в выведение базовой функции в конце, не поставил какой-то знак

0

Maksim Litvinov

  1. Обратите внимание, что оператор сравнения - это ===, а = это оператор присваивания.
  2. Повторю свой предыдущий комментарий. Сейчас функция smallestDivisor ничего не возвращает. Нужно вернуть из неё вызов внутренней функции iter() с аргументом 2
1

Сергей

Максим Литвинов, изменил оператор на присваивание(https://ru.hexlet.io/code_reviews/414971) и вызов внутренней функции, как я думаю, но увы

0

Maksim Litvinov

Сергей, нужно было сделать наоборот. Там, где вы сравниваете значение константы с числом, нужно ставить оператор сравнения. Например, здесь: if (num = 1) вы проверяете, что значение num равно 1, т.е. вы сравниваете значение num и единицу. Тут нужен оператор сравнения: if (num === 1).

С вызовом внутренней функции теперь все правильно, вы вызываете его с аргументом 2. Еще обратите внимание на это условие:

if (num % delitel = 0)

Не нужно возвращать здесь рекурсивный вызов. Оставьте это условие, как было в предыдущей версии ревью. Ведь если число делится на делитель без остатка, значит, делитель найден и нужно просто вернуть его.

0

Сергей

Максим Литвинов, строкой перед //end мы вызываем return (делитель)? ведь сама итерация уже закончилась и мы "закрываем" её

0

Maksim Litvinov

Эта строка return deletel; не нужна, до неё вряд ли когда-нибудь дойдет исполнение. Условия выше покрывают все возможные случаи и хотя бы одно из них выполнится. Чтобы все заработало, вам нужно сделать в самом конце в функции smallestDivisor сделать возврат return iter(2) и заменить еще в одном месте присваивание на сравнение (num % delitel = 0)

0

Сергей

Максим Литвинов, побольше тебе здоровья, мил человек

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев