Java 修正Fibonacci序列的迭代形式
我只是在学习斐波那契级数算法的迭代版本。我发现了以下代码Java 修正Fibonacci序列的迭代形式,java,c++,math,sequence,fibonacci,Java,C++,Math,Sequence,Fibonacci,我只是在学习斐波那契级数算法的迭代版本。我发现了以下代码 int Fibonacci(int n) { int f1 = 0; int f2 = 1; int fn; for ( int i = 2; i < n; i++ ) { fn = f1 + f2; f1 = f2; f2 = fn; } } intfibonacci(intn) { int f1=0; int f2=1; int-fn; for(int
int Fibonacci(int n)
{
int f1 = 0;
int f2 = 1;
int fn;
for ( int i = 2; i < n; i++ )
{
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
}
intfibonacci(intn)
{
int f1=0;
int f2=1;
int-fn;
for(int i=2;i
我脑子里刚冒出一个愚蠢的问题。上面的函数将前面的两个数字相加并返回第三个数字,然后为下一次迭代准备变量。如果是这样呢。“返回前三个数字之和的序列数”我们如何更改上述代码以找到这样的数字。作为提示,请注意,上述算法通过在一些变量中“循环”数字来工作。在上面的代码中,在每个存储点
F_0 F_1
a b
然后在循环中通过一个步骤“移动”它们:
F_1 F_2
a b
然后在下一个循环迭代中再次“移动”它们:
F_2 F_3
a b
如果要更新最后三个值之和的算法,请考虑按如下方式存储它们:
T_0 T_1 T_2
a b c
然后再次移动它们:
T_1 T_2 T_3
a b c
T_2 T_3 T_4
a b c
然后再次移动它们:
T_1 T_2 T_3
a b c
T_2 T_3 T_4
a b c
将这种直觉转化为代码是一个很好的练习,所以我将把这些细节留给您
也就是说,有一种更快的方法来计算斐波那契和“Tribonacci”序列的第n项。描述了一个非常巧妙的技巧,使用矩阵乘法比上面的循环更快地计算术语,并且有代码实现了该算法
希望这有帮助 我通常不会回答那些“闻起来”像家庭作业的问题,但既然别人已经回答了,我会这样做:
int Tribonacci(int n)
{
int last[3] = { 0, 0, 1 }; // the start of our sequence
for(int i = 3; i <= n; i++)
last[i % 3] = last[i % 3] + last[(i + 1) % 3] + last[(i + 2) % 3];
return last[n % 3];
}
inttribonaci(intn)
{
int last[3]={0,0,1};//序列的开始
对于(inti=3;i我喜欢递归。叫我虐待狂吧
static int rTribonacci (int n, int a, int b, int c) {
if (n == 0) return a;
return rTribonacci (n-1, b, c, a + b + c);
}
int Tribonacci (int n) { return rTribonacci(n, 0, 0, 1); }
如果要使用递归,则不需要任何其他参数:
int FibonacciN(int position)
{ if(position<0) throw new ArgumentException("invalid position");
if(position==0 || position ==1) return position;
return FibonacciN(position-1) + FibonacciN(position-2);
}
int FibonacciN(int位置)
{if(positionumm…f=(f-1)+(f-2)+(f-3)
可以归结为代数:f=(3*f)-6
@MarcB-你上面写的是真的,但符号是错误的。循环是f(n)=f(n-1)+f(n-2)+f(n-3),这不能像您描述它的方式那样简化。这是最简单的部分。我们将如何使用f1、f2、f3的值为下一次迭代做好准备?您就在现场。这实际上是一个棘手的部分,它将值重新分配给变量的方式。它正在工作。谢谢,做得很好。