Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция находящая минимальное число (https://javascript.ru/forum/misc/81418-funkciya-nakhodyashhaya-minimalnoe-chislo.html)

student_js28 23.11.2020 22:03

Функция находящая минимальное число
 
Всем привет. У меня есть функция которая находит минимальное число которое больше 300 и нацело делиться на 17. Теперь мне нужно переписать эту функцию под рекурсию, с которой я к сожалению плохо знаком, буду благодарен если поможете кодом.
function minNumber(x, b){
    while (true) {
      if (x % b==0) {
        console.log(x);
        break;
      }
      x++;
    }
    }
    minNumber(300, 17)

рони 23.11.2020 22:18

student_js28,
махнёмся, вы решение без цикла, в одну строку, вернуть сразу нужное число, а в замен рекурсию?

student_js28 23.11.2020 22:59

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

voraa 23.11.2020 23:53

Ну как бы еще и математику немного надо знать.

const minNumber = (x, n) => (Math.floor(x/n)+1)*n
alert(minNumber(300, 17))

рони 24.11.2020 00:04

:-?
function minNumberNoRecursion(x, b){
     return x + b - x % b
    }
console.log(minNumberNoRecursion(300, 17))

function minNumberRecursion(x, b){
     return ++x % b ? minNumberRecursion(x, b) : x
    }
console.log(minNumberRecursion(300, 17))

Alexandroppolus 24.11.2020 11:39

Это на курсах по программизму дают такие идиотские задачи на рекурсию?

Gubka_Morty 29.11.2020 00:22

function minNumber(x, b)
{
    if(x % b == 0) return x;
    else return  minNumber(x + 1, b);
}
    alert(minNumber(300, 17));



Вот код. Суть проста, вызываем функцию с начальными значениями 300 и 17, дальше делаем проверку - если Х делится нацело на 17, то выходим и возвращаем этот самый Х. Иначе, число Х не делится нацело на 17 и в таком случае мы снова вызываем эту же функцию, но меняем во входящих значениях Х на Х + 1, то есть увеличиваем на 1. Дальше функция начинается сначала и теперь мы пробуем уже не 300 поделить на 17, а 301. Если не сработало, то мы опять вызываем функцию с изменением аргумента Х на Х + 1. Теперь Х = 302. И так до тех пор, пока не будет найден ответ.

рони 29.11.2020 07:59

Gubka_Morty,
чем ваш код отличается от пост #5 строка 6?


Часовой пояс GMT +3, время: 09:42.