美文网首页
斐波那契数列

斐波那契数列

作者: 呼啦呼啦的圈 | 来源:发表于2019-06-25 18:11 被阅读0次

用列表显示斐波那契数列。

数组中,第n个元素,等于第n-1 加上第n-2的值。数组起始为[0,1]

第三个值,就是第一个值加上第二个值,就是0+1等于1。

第四个值,就是1+1等于2。

使用列表显示

这个问题可以考验很多点,分析问题的能力,面相对象的能力,计算的能力。

解决问题,就需要先分析问题,这个情况下会遇到三个问题:

其一,每个数值均需要计算。

其二,后面的数据值会很大。

其三,数据是无限多的。

需要一个用于计算的工具类,用来计算索引为n的值,一开始很简单

return Ary[n-1]+Ary[n-2];

但是很快int的长度就不够了,然后uint也不够了,double都不够了…

这时数值的计算已经不行了,那就需要换一种算法。用String来记录数值,用String来计算加法。

把字符串拆分成一段一段的,那就是个位,十位,百位…数的加法运算了,计算机可以处理,然后再拼接成字符串。

如果以这个作为面试题材,

那么就是,用tableview显示斐波那契。要丝滑的UI以及无限的数据。

考验一个开发者对数据的处理,面向对象的思考等方面。

首先像上面所述,数据不能用基本类型了,需要用字符串,或者字节数组。既然需要做字节的加减,就需要一个工具类。先称它为CalculateUtil,里面有个类方法stringAddFunc用于计算两个string的和。前期数值小的时候,计算快,后期长度大了,就需要比较长的时间了,每次都计算无疑是浪费时间,那么就把计算结果缓存在内存中,创建NumberCacheManage,来管理缓存集合。设置一个缓存大小,和开始的索引。每次需要取值的时候,就从这个类中查询。没有的话,就去计算,得到结果并缓存。这时候分多钟情况,在哪里去计算?是在cacheManage中计算么,还是在调用cache后,再计算,拿到结果在set到cache中?秉承单一原则,不应该在cache中处理。所以,获取数据时,并不是直接调用cache,而是调用NumberManage,这个类里,聚合了Cache和CalculateUtil,Manage先查询缓存,然后计算,在把数据设置到缓存中。

这样,就有vc,view(UITableView),NumberManage,NumberCacheManage,CalculateUtil这几个文件。

PS 缓存类里,有加法,用于计算新的值。一旦加载到一定程度,前面的值就会被删除,因为缓存是有范围的,这时候,往回滑动,加载旧值时,就需要用减法了。

相关文章

网友评论

      本文标题:斐波那契数列

      本文链接:https://www.haomeiwen.com/subject/phbxcctx.html