Javascript.RU

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

Каждое четвертое число это сумма первых трех
Как написать рекурсию которая бы показывала число по порядковому номеру, учитывая что на входе у нас - 0 1 2 . К примеру: Нам нужно узнать какое число стоит под номером 5, в данном случае это будет - 6, так как 0(1) 1(2) 2(3) 3(4) 6(5) 11(6). Учитывая то, что бы программа не запоминала все значения до этого числа. Я написал некую функцию, но у неё есть существенные минусы.
1. Она считает от единицы
2. Очень маленький диапазон просчета. Браузер виснет
function summ(n) {
	if (n <= 3) {
		return n
	} else {
		return summ(n - 1) + summ(n - 2) + summ(n - 3);
	}
}
alert(summ(+prompt('Enter the number, bigest than 3')));


Еще одна просьба, не пишите пожалуйста решение, я прошу лишь о маленькой подсказке, а то я завис с этим вопросом.

Последний раз редактировалось korbok, 11.11.2015 в 17:06.
Ответить с цитированием
  #2 (permalink)  
Старый 11.11.2015, 17:46
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от korbok
Учитывая то, что бы программа не запоминала все значения до этого числа.
Т.е. вы считаете возможным посчитать число по порядковому номеру зная только сам порядковый номер и зависимость числа от предыдущих трёх чисел?
Ответить с цитированием
  #3 (permalink)  
Старый 11.11.2015, 17:58
Новичок на форуме
Отправить личное сообщение для korbok Посмотреть профиль Найти все сообщения от korbok
 
Регистрация: 11.11.2015
Сообщений: 4

Если быть откровенным, то слегка не представляю это, но такова поставленная задача. Да и возможно же сделать так что бы переменные сами себя заменяли на новое значение. Ведь нужно считать только три цифры которые стоят перед заветным параметром, до тех пор, пока не получится этот самый параметр. Я очень новичок в этом всем деле, но есть некоторые домыслы. Что если создать переменную которая бы временно хранила значение которое нужно передать дальше ?
То есть:
a + b + c = d
a = b
b = c
c = d
Вот что то типа такого. Но ведь если так сделать то все переменные приобретут одно значение.
Ну или хотя бы добиться того, то бы отсчет начинался с 0, а не с 1 ?
Ответить с цитированием
  #4 (permalink)  
Старый 11.11.2015, 18:24
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от korbok
То есть:
a + b + c = d
a = b
b = c
c = d
так возможно сделать и весьма просто. Напишите на бумаге и вы быстро найдёте ответ (если ещё не нашли )
Ответить с цитированием
  #5 (permalink)  
Старый 11.11.2015, 18:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

korbok,
сначала нужна функция которая запомнит три числа и вернёт функцию обработки в которой и будет рекурсия
Ответить с цитированием
  #6 (permalink)  
Старый 11.11.2015, 18:41
Новичок на форуме
Отправить личное сообщение для korbok Посмотреть профиль Найти все сообщения от korbok
 
Регистрация: 11.11.2015
Сообщений: 4

Сообщение от EmperioAf Посмотреть сообщение
так возможно сделать и весьма просто. Напишите на бумаге и вы быстро найдёте ответ (если ещё не нашли )
Вот в том то и беда. Я уже пишу даже в душе, на зеркале, решение, вот оно, под носом, но как то ускользает.
Приведу пример того что я писал и оно не работает.
function summ(a, b, c, n) {
	var d;
	a == b;
	b == c;
	c == d;
	if (n <= 3) {
		return n
	} else {
		return summ(d * n)
	}
}
alert(summ(0, 1, 2, +prompt('Enter the number, bigest than 3')));
Ответить с цитированием
  #7 (permalink)  
Старый 11.11.2015, 18:43
Новичок на форуме
Отправить личное сообщение для korbok Посмотреть профиль Найти все сообщения от korbok
 
Регистрация: 11.11.2015
Сообщений: 4

Сообщение от рони Посмотреть сообщение
korbok,
сначала нужна функция которая запомнит три числа и вернёт функцию обработки в которой и будет рекурсия
То есть, если я правильно понял. Вы имеет ввиду написать функцию, которая бы хранила в себе исходные числа (0 1 2), а затем написать функцию с рекурсией, в которой бы эта функция участвовала в суммировании ?
Ответить с цитированием
  #8 (permalink)  
Старый 11.11.2015, 19:07
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,672

korbok, напиши числовой ряд где каждое четвертое число это сумма первых трех и перечитай свой пост, имхо ты бредишь...
Ответить с цитированием
  #9 (permalink)  
Старый 11.11.2015, 19:11
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

не может быть что до вас не доходит такой простой расчёт
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>ГГ</title>
<style>

* {
  margin:0;
  padding: 0;
  outline: none;
}

</style>
</head>
<body>
<textarea name="" id="" cols="30" rows="30"></textarea>

  <script>
  var textarea = document.querySelector('textarea');

var a = 1;
var b = 2;
var c = 3;
var i = 0;
while (i<20) {
  c = a+b+c;
  b = c-a-b;
  a = c-a-b;
  i++;
  textarea.value += a + " " + b + " " + c+"\r\n";

}

  </script>
</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 11.11.2015, 19:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

korbok, оптимальнее запоминать результат ...
var fn = function() {
    var a = [0, 1, 2];
    return function c(b) {
        if (b >= a.length) {
            var d = a.slice(-3).reduce(function(a, b) {
                return a + b
            });
            a.push(d);
            return c(b)
        }
        return a[b]
    }
}();



alert( [fn(0),fn(1),fn(2),fn(3),fn(4),fn(5),fn(6),fn(7),fn(8)] ); //0,1,2,3,6,11,20,37,68
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
background resize IceDvl jQuery 4 25.04.2014 17:54
Баги Opera пишем сюда devote Оффтопик 101 08.08.2013 05:56
Психологическая деформация программистов DreamTheater Оффтопик 59 24.03.2012 05:03