Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.04.2021, 17:11
Новичок на форуме
Отправить личное сообщение для Roman_ Посмотреть профиль Найти все сообщения от Roman_
 
Регистрация: 25.05.2020
Сообщений: 4

Прошу помочь с решением задачки - число Фибоначчи и интерактивная часть
Всем доброго дня.
Написал вот такой несложный пример:

alert ('Форма вычисления числа Фибоначчи по порядковому номеру')

   let numberFib = prompt('Введите порядковый номер числа Фибоначчи')

if (numberFib == NaN  || numberFib == null) {
     alert('Введено некорректное значение')
} else {
   
   function fibonachy(numberFib) {

if (numberFib == NaN || numberFib == null) {
  
result = ('Введено некорректное значение')
}
if (numberFib <= 0) {
  result = "incorrect number"
}
if (numberFib == 1) {
    result = 0
}
if (numberFib == 2) {
    result = 1
}
if (numberFib == 3) {
    result = 2
}
if (numberFib > 3) {
    result = fibonachy(numberFib-1) + fibonachy(numberFib-2)
       return result;
   }
   }
  alert('Число Фибоначчи с порядковым номером ' + numberFib + ' равно ' + fibonachy(numberFib))
}


Хочу чтобы при вводе нечисла или вводе пустого поля программа показывала сообщение об ошибке и останавливалась. Не могу понять ЧЯДНТ, прошу помочь)))
Ответить с цитированием
  #2 (permalink)  
Старый 20.04.2021, 17:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

число Фибоначчи
Roman_,
function fibonachy(numberFib) {

    if (numberFib == 1) {
        result = 2
    }
    if (numberFib == 2) {
        result = 3
    }
    if (numberFib == 3) {
        result = 5
    }
    if (numberFib > 3) {
        result = fibonachy(numberFib - 1) + fibonachy(numberFib - 2)
    }
    return result;
}


alert('Форма вычисления числа Фибоначчи по порядковому номеру');

let numberFib = prompt('Введите порядковый номер числа Фибоначчи');

if (isNaN(+numberFib) || numberFib === null || +numberFib <= 0) {
    alert('Введено некорректное значение')
} else {
    alert('Число Фибоначчи с порядковым номером ' + numberFib + ' равно ' + fibonachy(+numberFib))
}
Ответить с цитированием
  #3 (permalink)  
Старый 20.04.2021, 19:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

Предложу функцию покороче...

function fibonachy(numberFib) {
	if (numberFib > 3) {
		result = fibonachy(numberFib - 1) + fibonachy(numberFib - 2)
	} else {
		let a = [2, 3, 5]
		result = a[numberFib - 1]
	}
	return result;
}
Ответить с цитированием
  #4 (permalink)  
Старый 20.04.2021, 19:12
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Предложу функцию пошустрее
для больших чисел, в том числе отрицательных
function fib(n) {
    let k = BigInt(n < 0 ? Math.pow(-1, n + 1) : 1);
    n = BigInt(Math.abs(n));
    const calculate = n => {
        if (n === 0n) {
            return [0n, 1n];
        }
        const [a, b] = calculate(n / 2n);
        const c = a * (2n * b - a);
        const d = (a * a + b * b);
        return n % 2n === 0n ? [c, d] : [d, c + d];
    }
    const res = calculate(n);
    return res[0] * k;
}
Ответить с цитированием
  #5 (permalink)  
Старый 20.04.2021, 19:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Ответить с цитированием
  #6 (permalink)  
Старый 21.04.2021, 09:30
Новичок на форуме
Отправить личное сообщение для Roman_ Посмотреть профиль Найти все сообщения от Roman_
 
Регистрация: 25.05.2020
Сообщений: 4

Сообщение от рони Посмотреть сообщение
Roman_,
function fibonachy(numberFib) {

    if (numberFib == 1) {
        result = 2
    }
    if (numberFib == 2) {
        result = 3
    }
    if (numberFib == 3) {
        result = 5
    }
    if (numberFib > 3) {
        result = fibonachy(numberFib - 1) + fibonachy(numberFib - 2)
    }
    return result;
}


alert('Форма вычисления числа Фибоначчи по порядковому номеру');

let numberFib = prompt('Введите порядковый номер числа Фибоначчи');

if (isNaN(+numberFib) || numberFib === null || +numberFib <= 0) {
    alert('Введено некорректное значение')
} else {
    alert('Число Фибоначчи с порядковым номером ' + numberFib + ' равно ' + fibonachy(+numberFib))
}


Спасибо, добрый человек))

Пошел читать про isNaN()
Ответить с цитированием
  #7 (permalink)  
Старый 21.04.2021, 09:46
Новичок на форуме
Отправить личное сообщение для Roman_ Посмотреть профиль Найти все сообщения от Roman_
 
Регистрация: 25.05.2020
Сообщений: 4

Сообщение от Vlasenko Fedor Посмотреть сообщение
Предложу функцию пошустрее
для больших чисел, в том числе отрицательных
function fib(n) {
    let k = BigInt(n < 0 ? Math.pow(-1, n + 1) : 1);
    n = BigInt(Math.abs(n));
    const calculate = n => {
        if (n === 0n) {
            return [0n, 1n];
        }
        const [a, b] = calculate(n / 2n);
        const c = a * (2n * b - a);
        const d = (a * a + b * b);
        return n % 2n === 0n ? [c, d] : [d, c + d];
    }
    const res = calculate(n);
    return res[0] * k;
}
Вот так всегда - как только появляется ощущение, что уже чего то понимаю, встречаю код который не ясен практически процентов на 80. Можете немного пояснить как это работает?
Насколько я понимаю сначала присвоили переменной k какое то условное числовое значение, далее идет часть BigInt - n, здесь n равно какому то выражению с n и далее я совершенно не понимаю((
Если не будет времени/желания - хотя бы направьте где почитать/посмотреть.
Ответить с цитированием
  #8 (permalink)  
Старый 21.04.2021, 10:31
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Roman_,
Искать по словесам "fast doubling"
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помочь с решением задачки Roman_ Общие вопросы Javascript 1 25.05.2020 21:10
Прошу помочь с решением проблемы с this Artem_Andreev Events/DOM/Window 6 17.08.2018 21:33