什么是递归函数?
在编程的世界里,递归就是一种调用自己的手段
递归函数:一个函数的内部,调用了自己,循环往复。
其实递归函数和循环很类似。
要实现递归要书写2个内容:
1,一个满足结束条件的结束函数
2,一个不满足条件的时候要执行的代码
下面的代码就是一个简单的递归函数,在这个函数里面调用了自己,会一直循环往复,没有止境,这种叫做死递归
function fn(){
console.log(1)
fn()
}
fn();//调用fn,执行fn里面的代码,打印1,又执行fn,又打印1,又执行fn,......
简单实现一个递归
==>需求:求1到5的和
==>先得到1+2=3
==>再算3+3=6
==>再算6+4=10
==>再算10+5=15
==>结束
开始书写:写递归函数先要写一个结束条件(为了避免出现"死递归")
function add(n){
//当n===5的时候就要结束
if(n===5){
return 5;
}
}
//再写不满足于条件时递归的处理
function add(n){
//add(n)这个函数的作用是:1到n的累加和
//当n===5的时候就要结束
if(n===5){
return 5;
}else{
return add(n-1)+n;
}
}
//按照上面的思路就可以书写递归了
递归案列:
计算1到100的累加和:
分析思路1:
==>我要书写一个函数叫做sum
==>这个函数有形参n,调用的时候:sum(n)
==>我这个sum函数的功能是计算任意一个数1到n的累加和
==>在思路1里面,写sum(5) = 5+4+3+2+1
==>也就是说如果你写sum(5),就是1到5,如果你写sum(8),就是1到8
==>假设这个函数已经写完了
==>如果要计算1-100,我可以这么写:100+sum(99)
==>如果要计算1-99,我可以写成:99+sum(98)
==>结论,如果要计算1-100:100+99+98+.....+2+sum(1);
==>结束条件就是n=1,sum(1) = 1
//思路1的代码实现
function sum(n){
if(n==1){
return 1;
}else{
return n+sum(n-1)
}
}
var result = sum(100);
console.log(result)
分析思路2:
==>我要书写一个函数叫做sum
==>这个函数有形参n,调用的时候:sum(n)
==>我这sum函数的功能是计算任意一个数到100的累加和
==>如果我写sum(90),我计算的是90+91+92+93+94+95+...100
==>如果我写sum(91),我计算的是+91+92+93+94+95+...100
==>我有以下结论:sum(90) = sum(91)+90
==>我有以下结论:sum(91) = 91+sum(92)
==>我有以下结论:sum(1) = 1 + sum(2)
==>我有以下结论:sum(100) = 100;
//思路2的代码实现:
function sum(n){
if(n==100){
return 100;
}else{
return n+sum(n+1)
}
}
var result = sum(1);
console.log(result)
计算Fibonacci sequence的第N项:
斐波那契数列(Fibonacci sequence),又称黄金分割数列、
因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,
指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,
斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)
function fibonacci(n){
if(n==1){
return 1;
}
if(n==2){
return 1;
}
//n = 3 :return fibonacci(2)+fibonacci(1)
//n = 4 :return fibonacci(3)+fibonacci(2)
return fibonacci(n-1)+fibonacci(n-2);
}
console.log(fibonacci(6))
计算20!
==>我要写一个函数,这个函数叫ji(n)
==>这个函数的功能是计算n!,并把结果返回
==>ji(1),就是求1的阶乘,返回1 ,如果这个函数只计算1的阶乘,功能可以实现
==>ji(2),就是求2的阶乘,返回2*1, 就是2*ji(1),功能可以实现
==>ji(3),就是求3的阶乘,返回3*2*1,就是3*ji(2),功能可以实现
==>ji(n),就是求n的阶乘,返回n*ji(n-1),功能可以实现
function ji(n){
if(n==1){
return 1;
}else{
return n*ji(n-1)
}
}
var y = 1
var x = 4+yi
console.log(ji(5));;//5+x