递归思想的内涵(递归的精髓是什么?)
正如上面所描述的场景,递归就是有去(递去)有回(归来),如下图所示。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的钥匙可以打开后面所有门上的锁一样;“有回”是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。
递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。特别地,在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况,这也正是递归的定义所在。格外重要的是,这个解决问题的函数必须有明确的结束条件,否则就会导致无限递归的情况。
递归的三要素
明确递归终止条件 . 给出递归终止时的处理办法 提取重复的逻辑,缩小问题规模模*
递归的应用场景
(1). 问题的定义是按递归定义的(Fibonacci函数,阶乘,…);
(2). 问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题,…); (3). 数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度,…)。
斐波那契数列
递归简单求和
递归阶乘
数组纯数字求和
数字枚举
默认从0开始 也可以设置初始值 然后依次自增
类似于js中的对象 直接使用点**(.)**语法访问枚举的成员
接口
接口用来定义一个类结构,用来定义一个类中应该包含哪些属性和方法
接口名可以重复(可以声明合并)
interface 只能表示像对象那种结构的类型
类
描述一个对象的类型 类型别名:名称唯一,不能重复
两者区别
- type类型别名 命名唯一,不可重复
- interface接口 可以重复定义