前段时间参加网易笔试,遇到这么一个题,实现斐波那契数列,要求时间复杂度尽可能小,但必须小于O(n方)
之前看到过这样的实现方式,好像很简单,可是就是想不起来了,当然递归实现是大家都会的,可是他的时间复杂度超过了O(n方),所以用递归肯定是不符合要求的,我当时想到的是,递归的时候,每求一个元素值就要把他之前的所有元素的计算都计算一遍,这必然降低了效率,如果改进的话就是先把之前元素得到的计算值保存,当计算下一个元素值时,直接利用已经保存的值,而无需重新计算,提高效率。回来后查了一下才知道,这种方法叫做迭代,这可不就是迭代吗。。。迭代的方法效率比较高,时间复杂度是O(n),空间复杂度是O(1)。
当然,如果实现有限个数字的输出,也可以用数组的形式,但这个效率比较低。
代码实现:
之前看到过这样的实现方式,好像很简单,可是就是想不起来了,当然递归实现是大家都会的,可是他的时间复杂度超过了O(n方),所以用递归肯定是不符合要求的,我当时想到的是,递归的时候,每求一个元素值就要把他之前的所有元素的计算都计算一遍,这必然降低了效率,如果改进的话就是先把之前元素得到的计算值保存,当计算下一个元素值时,直接利用已经保存的值,而无需重新计算,提高效率。回来后查了一下才知道,这种方法叫做迭代,这可不就是迭代吗。。。迭代的方法效率比较高,时间复杂度是O(n),空间复杂度是O(1)。
当然,如果实现有限个数字的输出,也可以用数组的形式,但这个效率比较低。
代码实现: