1.什么是递归?
(1) 程序自我调用,简单理解就是函数自己调用自己。目的是为了处理不确定层级的相同数据结构的数据处理。
(2) 优点:代码更简洁清晰,可读性更好;
(3) 缺点:时间和空间消耗比较大、很多计算都是重复的、调用栈可能会溢出。
2. 案例
阶乘 :
// 阶乘
function fun(n){
// n等于1时结束函数返回1
if(n==1) return 1
return n*fun(n-1)
}
console.log(fun(5));
用es6类计算圆的面积和周长 :
// 用es6计算圆的面积和周长
class Circle{
// r为半径
constructor(r){
this.r = r
}
Area(){
var num = Math.PI.toFixed(2)
return `半径为${this.r}的圆的面积为`+num*this.r**2
}
Length(){
var num2 = Math.PI.toFixed(2)
return `半径为${this.r}的圆的周长为`+2*num2*this.r
}
}
let cir = new Circle(4)
console.log(cir.Area());
console.log(cir.Length());
类的继承性 :
class Person{
// 使用constructor创建构造函数 this指向构造函数实例
constructor (name,light,weigth){
this.name=name
this.light=light
this.weigth=weigth
}
say(){
console.log(this.name+'唱歌');
}
}
let obj = new Person('刘德华','180','150')
console.log(obj);
obj.say()
let obj2 = new Person('刘亦菲','170','95')
console.log(obj2);
obj2.say()
// 继承性
class Son extends Person{
constructor(name,light,weigth,age){
// // 如果子类有自己的构造方法,需要用到super强制调用父类构造方法
super(name,light,weigth)
this.age=age
}
}
let son = new Son("杨颖",'165','90',"32")
console.log(son);
用递归实现 斐波那契数列 :
function fn(n){
// 第一次和第二次的值都为1
if(n==1 || n==2) return 1
return fn(n-2)+fn(n-1)
}
// 传的参数表示第n次
console.log(fn(7));