用列表显示斐波那契数列。
数组中,第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 缓存类里,有加法,用于计算新的值。一旦加载到一定程度,前面的值就会被删除,因为缓存是有范围的,这时候,往回滑动,加载旧值时,就需要用减法了。
网友评论