今天刷到一个讲“费氏”的视频,看着还挺有意思,我就上手试试。
我连这是啥都不知道,就看到一堆数字,说是符合某种规律。然后我就去搜下,原来这个叫“费氏数列”,说白,就是后面一个数,是前面两个数的和。这规律,看起来挺简单的。
我琢磨着,这玩意儿能干啥?视频里说,自然界里很多东西都符合这个规律,比如那个什么向日葵的花瓣,还有什么螺线的数目,都是按照这个数列长的。听着挺玄乎,不过咱也不懂,就当长见识。
然后我就想,这东西能不能用代码写出来?毕竟咱是干这个的。网上说,可以用“递归”来搞。啥是递归?咱也不懂,反正就是说,一个东西能自己调用自己。听着有点绕,不过照着网上的例子,我也能葫芦画瓢写一个。
我先定一个小目标,比如就先算出前10个数。我先写一个简单的,就是如果 n 是 0 或者 1,就直接返回 n,要不然,就返回前两个数的和。大概就是这个意思:
- n = 0 或 1 时,结果就是 n
- n > 1 时,结果就是 (n-1) + (n-2)
我试试,还真行!能跑出来结果!
然后我又想,这玩意儿能不能算个大的数?比如,算第100个?我一试,卡住!电脑风扇呼呼转,半天没反应。看来这个“递归”虽然写起来简单,但是算起来太费劲。
我又去搜搜,原来有个叫“动态规划”的东西能解决这个问题。听着挺高级,就是说,把算过的结果存起来,下次再算的时候,直接拿来用,就不用再算一遍。这法子
我又照着网上的例子,用“动态规划”的思路,重新写一个。这回再算第100个,嗖的一下就出来!看来这个“动态规划”还真厉害!
总结
今天折腾这个“费氏数列”,也算学点东西。知道啥是“递归”,啥是“动态规划”,还见识这个数列在自然界的神奇应用。虽然咱也不是搞科研的,但是解一下这些东西,感觉还挺有意思的。
以后再遇到这种看起来挺复杂的问,我也知道该咋下手。先搞清楚规律,再想想咋用代码实现,遇到问题就去搜,总能找到解决的办法。
还没有评论,来说两句吧...