Базовая концепция рекурсии, решения типовых задач

Рассмотрим решения базовых, типовых задач на рекурсию.

Оглавление статьи

  1. Вводная часть
  2. Сумма всех чисел
  3. Факториал числа
  4. Обратный порядок массива
  5. Палиндром строки
  6. Число Фибоначчи

Вводная часть

Рекурсия - позволяет функциям вызывать сами себя в своем исполнении. Этот метод решения задач и алгоритмов не только эффективен, но и обладает уникальной красотой в своей структуре. В этой статье мы рассмотрим, что такое рекурсия, как она работает и как ее можно применить для решения базовых задач в программировании.

Сумма всех чисел

Решение задачи на сумму чисел заданного числа.

Например: 4 => 1 + 2 + 3 + 4 = 10

JS
const num = 4

// Сумма всех чисел: 10
console.log('Сумма всех чисел:', sum(num))

function sum(num) {
  if (num < 1) {
     return num
  }

  return num + sum(num - 1)
}

Факториал числа

Решение задачи на нахождение факториала числа.

Например: 4 => 1 * 2 * 3 * 4 = 24

JS
const num = 4

// Факториал числа: 24
console.log('Факториал числа:', fact(num))

function fact(num) {
  if (num === 1) {
     return 1
  }

  return num * fact(num - 1)
}

Обратный порядок массива

Решение задачи на переворачивание массива в обратный порядок.

Например: [2,5,1,3,6,4] => [4,6,3,1,5,2]

JS
const arr = [2,5,1,3,6,4]

// Исходный массив: [2,5,1,3,6,4]
console.log('Исходный массив:', arr)

reverse(0, arr)

// Перевернутый массив: [4,6,3,1,5,2]
console.log('Перевернутый массив', arr)

function reverse(i, arr) {
  const length = arr.length

  if (i >= Math.floor(length / 2)) {
    return
  }

  const tmp = arr[i]
  arr[i] = arr[length - i - 1]
  arr[length - i - 1] = tmp

  reverse(i + 1, arr)
}

Палиндром строки

Решение задачи на определение является ли строка палиндромом.

Например: madam => madam с лево на право и справа на лево читается одинаково

JS
let str = 'madam'

// Исходная строка: madam
console.log('Исходная строка:', str)

let newStr = reverse(0, str)

// Исходная строка: madam
console.log('Перевернутая строка:', newStr)

// Палиндром
console.log(str === newStr ? 'Палиндром' : 'Не палиндром')

function reverse(i, str) {
  const length = str.length

  if (i >= length / 2) {
    return str
  }

  const newStr = str.split('')

  const tmp = newStr[i]
  newStr[i] = newStr[length - 1 - i]
  newStr[length - 1 - i] = newStr[i]

  return reverse(i + 1, newStr.join(''))
}

Число Фибоначчи

Решение задачи на нахождение числа Фибоначчи. Числовая последовательность, первые два числа которой являются 0 и 1, а каждое последующее за ними число является суммой двух предыдущих.

Например: 10 => 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55

JS
let num = 10

// Исходное число: 10
console.log('Исходное число:', num) // 10

num = fibonacci(num)

// Число Фибоначчи: 55
console.log('Число Фибоначчи:', num) // 55

function fibonacci(num) {
  if (num <= 1) {
    return num
  }

  return fibonacci(num - 1) + fibonacci(num - 2)
}
Предыдущая статья Математические манипуляции с числами Следующая статья Базовая концепция одномерных массивов, решения типовых задач