前言: 公式:(基础 + 基础 + 基础 + ...更多的基础) × 维度(影响因素) = 问题
总感觉这个公式还缺了什么,将会在后续更新!
斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
上面的文字很多,总结下来就是斐波那契数列真的很NB
你可能没听过斐波那契数列,但是黄金分割线应该听过吧,最完美的身体比例,如果还不知道呢?
没关系,看到这篇你应该~可能~大概就懂了吧!
看了两部抽象算法,你应该大概知道了我们的流程
PS:当你出现了问题,那就停下来看看原文——作者·陈
源不知名大佬并且经过作者实践验证:越是简单的失误,它所造成的影响越大
正式开始分析
找切入点——斐波那契数列以如下被以递推的方法定义:F(n) = F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N)
切入点找到了,该怎么做呢?
最近发现一个重大发现,那就是计算机是看不懂这些公式中的元素的,计算机就是典型的把加减乘除运用到极致的超级计算器而已
在上面那个重大发现,我们的解题方式也出现了重大改变,通过两个例子让你清晰知道
第一个例子:教小学生算苹果——这个盘子里有三个苹果(红)和两个香蕉(黄)
一个前提:小学生只会加减乘除不知道什么是苹果什么是香蕉
小学生不知道什么是苹果和香蕉,那么我们教他不就好了
告诉他香蕉的定义是什么,苹果的定义是什么就好了!
香蕉 = 黄白色的果肉 + 黄色的果皮
苹果 = 红色的果皮 + 白色的果肉 + 核
然后小学生就能根据这些进行运算,成功算出了 3 + 2 = 5
第二个例子 大猩猩学手语
精通1000多种手语的大猩猩,临死前警示人类要保护地球_哔哩哔哩_bilibili
一个前提:大猩猩不会手语,它会的手语不是我们这种统一的
开始教的时候,先从简单开始,告诉它 吃 = 什么手语,喝 = 什么手语
到了后面它学会了1000多种
两个例子告诉我们,计算机看不懂,但是我们可以通过定义告诉它,让它懂
其实你稍微了解一下最近大火的一个工具,你会发现,它的学习过程和教小学生还有大猩猩一样,从简单开始,从容易开始,然后定义,反复锻炼
一套流程在西方那边有一本书——一万小时天才理论
再加上一个深度学习(广度和深度)就成了现在这个看似十分聪明的AI,毕竟在作者的使用过程中,我会的东西我感觉让它去写还可能为了联系上下文去做修改,不如我自己写,写简单的算法让它写我感觉没有意义,毕竟我的算法题的理解是——算法是考验一个人解决复杂问题的能力之一,如果本身没有多厉害的解决问题能力,靠ai直接解决这不利于后期的发展,而且解决问题不仅仅在于代码,还有现实,除非AI可以代替你活着
这里是在抵制ai吗?不不,时代在发展,人应该跟着时代走,除非你强大到可以改变时代,这就是那句话——强者从来不抱怨环境,一般人还是跟着环境走吧
怎么用AI,就目前作者的用法,仅仅在于搜索和翻译。。。目前还没有独特的理解,敬请期待吧
回到我们这个斐波那契数列以如下被以递推的方法定义:F(n) = F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N)
该怎么实现呢?第一步告诉计算机这里面的元素有什么
我们是怎么教小学生的
文字 映射 定义
用计算机语言来说就是:标识符 映射 定义
疑问:标识符是什么?不应该是变量名吗?
因为这个问题,我百度了两天,发现了根本没有变量名这个专属名词~~~~~~~
他们口中的变量名不过是标识符的口头表达,为什么这么说呢?
标识符(标识某个实体的符号)_百度百科 (baidu.com)
看看它们在编程语言中的定义,有没有发现,那些家伙说的变量名条件和标识符的条件完全一模一样
C语言
标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。
不能把C语言关键字作为用户标识符,例如if,for,while等。
标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
标识符对大小写敏感,即严格区分大小写。一般对变量名用小写,符号常量命名用大写。
标识符命名应做到“见名知意”,例如,长度(length),求和、总计(sum),圆周率(pi)……
当然,你们管它叫变量名也是没问题的,这里为了统一区分——叫他标识符
标识符 + 赋值符 + 元素定义 = 文字 映射 定义
用编程语言告诉计算机,元素1~元素4的标识符 + 赋值符 + 元素定义
// F(n) = F(n - 1) + F(n - 2)(n ≥ 2,n ∈ N)int element_1 = n;int element_2 = n - 1;int element_3 = n - 2;boolean element_4 = n >= 2;
(n ≥ 2,n ∈ N)应该都懂吧...不懂?这就是一个条件,变量n 要大于等于 2,并且属于自然数集合
这些定义有了,那么举例试试看,变量要大于等于2,那么我们从3开始吧。。。
int element_1 = 3;int element_2 = 3 - 1;int element_3 = 3 - 2;boolean element_4 = 1 >= 2;if (element_1 == element_2 + element_3 && element_4){System.out.println(element_1 + "是一个黄金数");}else {System.out.println(element_1 + "不是一个黄金数");}
怎么让它根据我们的输入内容计算出是不是黄金数呢
这个我知道,传入一个参数就好了
public void test3(int element_1){int element_2 = element_1 - 1;int element_3 = element_1 - 2;boolean element_4 = element_1 >= 2;if (element_1 == element_2 + element_3 && element_4){System.out.println(element_1 + "是一个黄金数");}else {System.out.println(element_1 + "不是一个黄金数");}}
这样我们的黄金数就完成了,虽然很简单
总结:
问题简单化是为了更好的行动
简单化的流程:找切入点,分割元素,组合元素