Каждое четвертое число это сумма первых трех
Как написать рекурсию которая бы показывала число по порядковому номеру, учитывая что на входе у нас - 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'))); Еще одна просьба, не пишите пожалуйста решение, я прошу лишь о маленькой подсказке, а то я завис с этим вопросом. |
Цитата:
|
Если быть откровенным, то слегка не представляю это, но такова поставленная задача. Да и возможно же сделать так что бы переменные сами себя заменяли на новое значение. Ведь нужно считать только три цифры которые стоят перед заветным параметром, до тех пор, пока не получится этот самый параметр. Я очень новичок в этом всем деле, но есть некоторые домыслы. Что если создать переменную которая бы временно хранила значение которое нужно передать дальше ?
То есть: a + b + c = d a = b b = c c = d Вот что то типа такого. Но ведь если так сделать то все переменные приобретут одно значение. Ну или хотя бы добиться того, то бы отсчет начинался с 0, а не с 1 ? |
Цитата:
|
korbok,
сначала нужна функция которая запомнит три числа и вернёт функцию обработки в которой и будет рекурсия |
Цитата:
Приведу пример того что я писал и оно не работает. 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'))); |
Цитата:
|
не может быть что до вас не доходит такой простой расчёт
<!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> |
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 |
Часовой пояс GMT +3, время: 00:31. |