我在看这个网站:http://rosettacode.org/wiki/Fibonacci_sequence#JavaScript并看到了这个程序:
function fib(n) {
return function(n,a,b) {
return n>0 ? arguments.callee(n-1,b,a+b) : a;
}(n,0,1);
}
Run Code Online (Sandbox Code Playgroud)
这是如何工作的,这两个参数(a和b)有什么帮助.我追踪它仍然无法弄清楚它是如何工作的
我对编程很新,并且很难理解这个Fibonacci序列示例:
var fib = [0, 1];
for (var i = 2; i < n; i++) {
fib[ i ] = fib[ i - 1 ] + fib[ i - 2 ];
console.log(fib);
}
Run Code Online (Sandbox Code Playgroud)
在第一次迭代中,索引2等于1,足够简单.但是,当我尝试i = 3的第二次迭代时,我得到:
fib[ 3 ] = fib[ 3 - 1 ] + fib[ 3 - 2 ];
fib[ 3 ] = fib[ 2 ] + fib[ 1 ];
fib[ 3 ] = fib[ 3 ];
Run Code Online (Sandbox Code Playgroud)
我的思维在哪里出错了?到目前为止,我有:
var fib = [0,1,1,3]
Run Code Online (Sandbox Code Playgroud)
我知道这是不正确的.
几个月前,作为一个笑话,我的一位同事试图通过使用这种指数算法计算斐波纳契数来"加速宇宙的热死":
int Fib(int n)
{
if (n <= 1)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
Run Code Online (Sandbox Code Playgroud)
这怎么不会导致C#中的stackoverflow?我们设法在放弃之前得到了Fib(52)(而Fib(51)花了很多时间).我认为这会严重破坏堆栈以导致堆栈溢出,因为CLR默认只将1M分配给堆栈.另外,我很确定这也不适合尾递归.
我有一份我难以理解的家庭作业.我正在尝试编写一个程序,在第n个数字上输出斐波纳契数列.这是我到目前为止所拥有的:
def fib():
n = int(input("Please Enter a number: "))
if n == 1:
return(1)
elif n == 0:
return(0)
else:
return (n-1) + (n-2)
mylist = range[0:n]
print(mylist)
Run Code Online (Sandbox Code Playgroud)
我想我可以使用单独的函数,但我无法弄清楚如何传递计算斐波纳契数列的参数.然后下一步是打印出该数字的数字序列.
我最近偶然发现了朱莉娅语言,我很惊讶地看到了他们的说法.它声称比像Python这样的语言要快很多倍,我目前正用于语音识别的机器学习算法.他们对Fibonacci序列的要求比Python快30倍.
我不明白是什么让它变得如此之快.然而,我真正想知道的是,是否有人确实已经验证了这一点.如果是这种情况,我会从Python转到Julia语言,因为我正在构建语音识别器,因为我的响应速度很慢,而且无法让它变慢.还有github上的任何项目(或任何地方),我可以找到Julia项目,这些项目进行大量的数字处理,如图像处理,语音识别等.我搜索了其他一些链接,例如这个 ,但无法有效地决定.我可以运行程序并验证他们的声明,但如果有人已经这样做,那对我有帮助.
我试图在单位球体的表面上或多或少均匀地排列点.
我被告知虽然这个问题很难解决,但Fibonacci Lattices提供了一个非常好的解决方案.
我已经尝试了几天来关注链接文档中提供的非常简单的方法,但我根本无法让它看起来正确.
我正在使用javascript,我有一个对象数组e,每个对象都公开一个lat和lon参数.这是我用来排列球体上的点的函数:(现在假设点的数量总是奇数)
function arrangeEntries(e)
{
var p = e.length;
var N = (p - 1) / 2;
for (var i = -N; i <= N; i++)
{
e[i + N].lat = Math.asin((2 * i) / (2 * N + 1));
e[i + N].lon = mod(i, 1.618034) * 3.883222;
}
}
Run Code Online (Sandbox Code Playgroud)
同
function mod(a, b)
{
return a - Math.floor(a / b) * b;
}
Run Code Online (Sandbox Code Playgroud)
不同于文档中,我lat和lon …
我正在尝试创建一个类似于这些的Fibonacci Arcs应用程序.

但是,我想要完整的圆圈而不是圆弧,我想绘制的图片超过图片中显示的三条斐波纳契线.我已经使用JFreeChart创建了一个应用程序来尝试完成此任务.但是,这是尝试绘制上一张图片中显示的相同弧(但作为圆圈)时的结果.
最初,它只是看起来不对,但是当我缩小时,它确实是一个圆圈,但它太大了. 
要计算弧线,你绘制一条线,然后取一个斐波那契比例 - 让我们使用.381例如 - 该线的百分比.如果你看第一张照片,你会看到最里面的圆弧与直线相交,直线距离圆心的距离为.381%.首先,我计算这一点.然后我构建一条从.381%点到中心的线.然后我取这条线的距离,这应该是半径.然后我用这个半径绘制圆圈.
这是计算半径的代码.停止和开始是绘制线的停止点和起点.
multiplier = ratio38Value + i;
diffx = (stop.getX() - start.getX()) * multiplier;
diffy = (stop.getY() - start.getY()) * multiplier;
xValue = start.getX() + diffx;
yValue = start.getY() + diffy;
point = new Point(xValue, yValue);
lineSegment = new Line(point, stop);
radius = lineSegment.getDistance();
circle = new Circle(stop.getX(), stop.getY(), radius);
circles.add(circle);
Run Code Online (Sandbox Code Playgroud)
这是计算线距离的代码
public double getDistance(){
double x = Math.pow(endPoint.getX() - startPoint.getX(), 2);
double y = Math.pow(endPoint.getY() - startPoint.getY(), 2);
return Math.sqrt(x + …Run Code Online (Sandbox Code Playgroud) 在博客文章中偶然发现了这个糟糕的C++代码示例,没有任何解释为什么它被认为是"坏".我有自己的想法,但我想听听有经验的C++开发人员.
unsigned int Fibonacci (unsigned int n)
{
if (n == 0 || n == 1)
return n;
else
return Fibonacci (n - 1U) + Fibonacci (n - 2U);
}
Run Code Online (Sandbox Code Playgroud) 我为前22个词做了一个简单的斐波那契数列计算器:
i=1
n=0
while i<=20000:
i = i + n
n = i - n
print(i)
Run Code Online (Sandbox Code Playgroud)
看起来结果是正确的
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
Run Code Online (Sandbox Code Playgroud)
但我似乎无法在线上找到任何类似的代码。我认为那是一个很大的危险信号。有人可以告诉我这里有什么问题吗?这是效率低下的代码吗?
fibonacci ×10
javascript ×3
python ×3
algorithm ×2
recursion ×2
.net ×1
c ×1
c# ×1
html5-canvas ×1
java ×1
jfreechart ×1
julia ×1
math ×1
scala ×1