我很难理解为什么 #include <iostream> using namespace std; int fib(int x) { if (x == 1) { return 1; } else { return fib(x-1)+fib(x-2); } } int main() { cout << fib(5) << endl; } 导致分段错误。 一旦x下降到1不应该最终返回?
对于任意的n有很多种计算F(n)的方法,其中许多有很好的运行时和内存使用。 但是,假设我想问一个相反的问题: 给定F(n)n> 2,n是什么? (因为F(1)= F(2)= 1,所以n> 2限制在那里,并且没有明确的逆)。 什么是解决这个问题最有效的方法? 通过枚举Fibonacci数字并在达到目标数字时停止,这很容易在线性时间内完成,但有没有更快的方法做到这一点? 编辑:目前,这里发布的最好的解决scheme运行在O(log n)时间使用O(log n)内存,假设math运算在O(1)运行,并且机器字可以容纳任何数字在O(1)空间。 我很好奇,如果可以减less内存需求,因为你可以使用O(1)空间来计算斐波纳契数。
我知道如何制作斐波纳契数列表,但我不知道如何testing一个给定的数字是否属于斐波那契列表 – 想到的一种方法是生成fib列表。 数字到这个数字,看看它是否属于数组,但是必须有另一个更简单和更快的方法。 有任何想法吗 ?
我原本错误地编写了这个程序。 而不是返回一个范围之间的斐波纳契数字(即startNumber 1,endNumber 20 should =只有那些数字在1和20之间),我已经写了程序显示范围之间的所有斐波纳契数字(即。startNumber 1,endNumber 20显示=前20个斐波纳契数字)。 我以为我有一个确定的代码。 我也不明白为什么会这样。 startNumber = int(raw_input("Enter the start number here ")) endNumber = int(raw_input("Enter the end number here ")) def fib(n): if n < 2: return n return fib(n-2) + fib(n-1) print map(fib, range(startNumber, endNumber)) 有人在我的第二部分(这是closures作为重复 – https://stackoverflow.com/questions/504193/how-to-write-the-fibonacci-sequence-in-python-part-ii )指出,我需要通过使用while循环的生成器来传递startNumber和endNumber。 有人可以指出我如何做到这一点? 任何帮助是受欢迎的。 我是一个学习程序员,我遇到了一些混乱。 我被要求写一个程序,计算并显示斐波那契数列由用户input的起始号码和结束号码(即startNumber = 20 endNumber = 100,它将只显示该范围之间的数字)。 […]
我想知道如何find斐波纳契数列的第n项来表示一个非常大的n值,例如1000000.使用等级recursion方程fib(n)=fib(n-1)+fib(n-2) ,find第50个学期需要2-3分钟! Googlesearch后,我开始了解Binet的公式,但是这里不适合n> 79的值 有没有像我们一样寻找素数的algorithm呢?
有没有algorithm来计算次线性时间的第n个斐波纳契数?
我理解Big-O符号,但我不知道如何计算它的许多function。 特别是,我一直在试图弄清斐波那契数列的天真版本的计算复杂性: int Fibonacci(int n) { if (n <= 1) return n; else return Fibonacci(n – 1) + Fibonacci(n – 2); } 斐波纳契数列的计算复杂度是多less?它是如何计算的?