@Dazmond

Лёгкая задачка js, как возвести в квадрат с таким принципом (2∗n−1)?

Помогите решить вроде лёгкую задачку

Дано целое число n, большее 1. Найти квадрат данного числа, используя формулу n^2 = 1 + 3 + 5 + ... + (2 * n - 1). Из функции необходимо вывести строку, состоящую из чисел, получающихся на каждом шаге при добавлении каждого слагаемого (таким образом, получится строка из квадратов всех чисел от 1 до n).
Вот что у меня получилось
function testCycle(n) {
    var x = "";
    for (i = 1; i <= n; i++){
    x += (2*i-1) + "  "
    }
    return x;
}
console.log (testCycle(6))

По итогу мне выдает такую цепочку "1 3 5 7 9 11", а должен такую "1 4 9 16 25 36". Подскажите пожалуйста в чем моя ошибка?
P.S. дополнительный вопрос не в тему - почему return стоит после цикла, а не внутри него, по идее цикл должен выполняться внутри себя, а потом уже выводить return x внутри функции? Т.е. должно быть последнее посчитаете число. Но выполняется только когда return стоит после цикла.
  • Вопрос задан
  • 1003 просмотра
Решения вопроса 1
@Dazmond Автор вопроса
Путем долгих переборов нашел ответ, не понимаю до конца как это работает, мне кажется и в первом случае должно было но вот что получилось

function testCycle(n) {
    var x = '';
    var y = 0;
    for (var i = 1; i <= n; i++) {
    	y += (2 * i - 1);
    	x += y + ' ';
    	}
    return x;
}
console.log(testCycle(6)); 
//1 4 9 16 25 36
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Ошибка в том, что работаете с текстовой строкой. А надо с числом.
function testCycle(n) {
    // var x = ""; // зачем нам текст
    let x = 0; // число!
//    for (i = 1; i <= n; i++){ // но надо до 2n–1 с шагом 2
    for (i = 1; i <= (2 * n - 1); i += 2) {
//    x += (2*i-1) + "  "
      x += i;
      console.log(i, x);
    }
    return x;
}

testCycle(6)  /*
1 1
3 4
5 9
7 16
9 25
11 36
36
*/

Или можно, как вы изначально написали, производить вычисления (умножать-вычитать) на каждом шаге. Избавившись таки от текстовых строк:
function testCycle(n) {
  let result = 0;
  for (let i = 1; i <= n; i++) {
    result += 2 * i - 1;
    console.log(i, result);
  }

  return result;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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