Помогите решить задачу!
Помогите или хотя бы подскажите возможно ли реализовать на javascript решение следующей задачи?
Суть задачи: а1 = 100; a2 = a1 * 1.3 + 300 * (2-1); an = a(n-1) * 1.3 + 300 * (n-1); Как посчитать n-й член? в MS Excel я сделал, а на javascript знаний не хватает... |
Vor_tex,
<script> function a(n,x,k) { x = x * 1.3 + 300 * ++k; n--; return n <= 1 ? x : a(n,x,k) } ; for (var i=2; i<10; i++) {document.write(i + " = " +a(i,100,0 )+ "<br>")} </script> |
рони, спасибо огромное.
|
рони, я извиняюсь за наглость, а не подскажите как вывести первый член, чтобы он равнялся 100, а то он равен второму!
И еще бы подскажите как вы вести сумму всех предыдущих членов на заданном промежутке, а то у меня не то что нужно показывает... <script> function a(n,x,k) { x += x * 1.3 + 300 * ++k; n--; return n <= 1 ? x : a(n,x,k) } ; for (var i=10; i<=10; i++) {document.write(i + " = " +a(i,100,0 )+ "<br>")} </script> |
Vor_tex,
<script> function a(n,x) { for (var i = 0; i< n; ){ x = x * 1.3 + 300 * ++i; } return x } ; for (var i=0; i<10; i++) {document.write(i + " = " +a(i,100)+ "<br>")} </script> |
Vor_tex,
<script> function a(n,x) { var sum = x; for (var i = 0; i < n; ){ x = x * 1.3 + 300 * ++i; sum += x } return [n,x,sum] } ; for (var i=0; i<10; i++) {document.write(a(i,100).join(" ")+ "<br>")} </script> |
рони,
Так я и не понял зачем считать одни и те же значения по 10-20-30 раз. По-моему через эту штуку https://github.com/medikoo/memoizee/...ster/README.md код будет производительнее раз в 100 :) |
destus,
за ссылку конечно спасибо, но что там мне не понять, и Цитата:
|
Цитата:
|
рони,
Идея в том, что раз nый член считается по n-1ому, то эти значения можно закешировать и не считать заного. А так в твоем коде 6 строка выполняется много раз, причем считает одни и те же значения для a(1, 100) a(2, 100) и тд |
destus,
алгорим понятен, но ТС не указал частоту использования, и кешировать как-то затратно получается. |
рони,
Ок |
кеширование промежуточных результатов вычисления
destus,
:write: вариант с кешированием ... если вычислялось n = 10, а потом n = 3 , то результат для n = 3 не будет вычислятся, а вернётся из кеша. <script> var a = function() { var c = {}; return function(f, b) { !c[b] && (c[b] = { i: 0, 0: [b, b] }); for (var d = c[b].i, g = c[b][d][1], e = c[b][d][0]; d < f;) e = 1.3 * e + 300 * ++d, g += e, c[b][d] = [e, g], c[b].i = d; return c[b][f] } }(); for (var i=0; i<10; i++) {document.write(i + " " +a(i,100).join(" ")+ "<br>")} </script> |
Спасибо всем ребята! Вы меня очень выручили!
|
рони,
Все таки любишь ты изобретать велосипеды :) |
Часовой пояс GMT +3, время: 14:27. |