一直在寻找页面和许多伟大的人帮助无处所以我有一个实验室作业,我知道我必须做一个关于斐波那契数字的方法来计算位置n中的数字,但我不太确定做什么放入方法,我知道是我必须考虑希望你可以给予和想法。遇到麻烦。(不要求我帮忙)谢谢。
斐波纳契数以递归方式定义如下:
F(n)= n,n <= 1
对于n> 1,F(n)= F(n-1)+ F(n-2)
编写以下方法来计算F(n):
a)基于递归定义的O(2n ^ n)方法
b)使用循环的O(n)方法
c)使用封闭形式解决方案的O(1)方法 - 随意在线查找该公式。
使用n = 10测试所有三种方法; 20; 50; 100; 1000; 10,000; 100,000和1,000,000。如果特定算法和输入组合未在合理的时间内返回答案,请在报告中注明(即,不要等待数小时(或更糟)程序完成)。
答案 0 :(得分:2)
我认为“Hw”意味着家庭作业,所以没有代码我害怕。
a)O(2n)和O(n)是相同的。你的意思是O(2 ^ n)?如果您使用递归方法而不缓存结果,则会发生这种情况。
b)这是实现它的“明显”方式,使用程序实现并记住最后两个数字并使用它们来计算下一个数字。在伪代码中,它将类似于loop { a, b = b, a+b; }
c)除非你有无限的精度,否则这对所有n都不起作用,并且无限精度不是O(1)。例如,当我使用双倍时,fib(73)的效果为806515533049395,但实际上它是80651553304939 3 。不同之处在于使用浮点数时的舍入误差。
关于O(n)解决方案,如果要计算高达fib(1000000),那么64位整数将不会足够存储结果。你需要使用BigIntegers。添加两个BigInteger不是O(1)操作,因此我之前提到的O(n)性能过于乐观。
答案 1 :(得分:2)
好吧,为了回答部分c
,有一个恒定时间函数可以计算第n个斐波纳契数。你可以在这里找到它的公式:http://en.wikipedia.org/wiki/Fibonacci_number#Closed_form_expression