我有以下模式。我想将“ a”表示为n的函数。
if n=0 then a=0
if n=1 then a=0
if n=2 then a=3
if n=3 then a=3
if n=4 then a=10
.
.
.
if n=10 then a=10
if n=11 then a=29
.
.
.
if n=29 then a=29
if n=30 then a=66
.
.
.
if n=66 then a=66
if n=67 then a=127
.
.
您会看到a
的值保持不变,直到a
的值与n
匹配为止。之后a
的值更改,并且该值再次保持到a<=n
。我找到了发生这种模式的公式。是
a = 1^3 + 2
当n<=3
a = 2^3 + 2
当n > 3 and n <=10
等等。
如何将a
表示为n
的函数?
像f(n) = {___ <condition>
答案 0 :(得分:3)
您可以应用公式n^3-2
的倒数,将其四舍五入,然后再次应用该公式,以获取正确的序列。但是,必须对0、1和2的值进行硬编码。
注意:在带有数字类型的语言中,请确保立方根的结果是浮点型;如果将其自动转换为int,则会在转换中将其四舍五入。
function calculate(n) {
if (n <= 1) return 0;
if (n == 2) return 3;
return Math.pow(Math.ceil(Math.pow(n - 2, 1 / 3)), 3) + 2;
}
for (var i = 0; i < 70; i++) {
document.write(i + "→" + calculate(i) + " ; ");
}
附录:正如Stefan Mondelaers所评论的那样,在依靠浮点数学时必须要小心。上面的代码利用了以下事实:在JavaScript中(至少在我测试过的所有当前浏览器中),三次幂的三次方总是被低估了。例如在JavaScript的安全整数范围内,最大的三次方为4,503,569,204,744,000,但您得到的不是三次方根165,140,而是:
document.write(Math.pow(4503569204744000, 1/3));
如果要舍入浮点计算的结果,这些很小的错误可能会导致更大的错误。实际上,最简单的解决方法是在舍入之前添加或减去一个非常小的值。有关更多信息,请参见this question。