Задать вопрос
@Nerevar96

Нужен совет. Насколько мое решение лучше/хуже официального?

Решаю задачи из учебника.
Суть задачи: Напишите функцию pow(x,n), которая возвращает x в степени n. Иначе говоря, умножает x на себя n раз и возвращает результат.

Решение из учебника:
function pow(x, n) {
  let result = x;

  for (let i = 1; i < n; i++) {
    result *= x;
  }

  return result;
}

let x = prompt("x?", '');
let n = prompt("n?", '');

if (n < 1) {
  alert(`Степень ${n} не поддерживается, используйте натуральное число`);
} else {
  alert( pow(x, n) );
}


Вот мое решение:
let x = prompt('введи число', '')
let n = prompt('введи степень', '')

if (n < 0) {
    alert('степень должна быть больше нуля')
}

function pow(x, n) {
    return x ** n;
}

let result = x ** n
alert(result)
pow(x, n);


Мне мое решение кажется удачнее, элегантнее что ли... Я не пойму, зачем в этой задаче в принципе нужен цикл?
Можете пожалуйста написать комменты, что с моим решением не так? Или так? Что в нем плохого и хорошего?
  • Вопрос задан
  • 656 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
ваше решение с комментариями:
// если это не сайт барбершопа, лучше обращаться к клиенту на «Вы»
let x = prompt('введи число', '')
let n = prompt('введи степень', '')

// не забывайте, что prompt() всегда возвращает строку, а не число

if (n < 0) {
    // сообщение вывели, но выполнять всё равно продолжили
    alert('степень должна быть больше нуля')
}

// переизобрели встроенную функцию Math.pow()
function pow(x, n) {
    return x ** n; // возвели в степень 1-й раз
}

let result = x ** n  // возвели в степень 2-й раз
alert(result)
// напоследок таки функцию вызывали, но результат — вникуда
pow(x, n);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
использовать готовую функцию будет некрасиво, в правильной 'школе' за такой даже безупречный ответ должны ставить оценку 'хорошо'

для 'отлично' я предлагаю написать функцию, которая будет заметно эффективнее и вместо N умножений будет делать примерно log(N)
для этого попытаться представить возведение в степень не как N раз X*X*...*X а как (N/2 раз X*X*..*X)^2, а чтобы это делать в цикле, поступить так, если N четное, то делим его на два, вызываем рекурсивно свою же функцию и результат умнажаем на самого себя, иначе берем N-1 и делаем тоже самое но результат дополнительно умножаем на X

p.s. полгаю если сумеешь заменить рекурсию на цикл, будет однозначно плюсищем
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы