递归函数
概念解释
我们先来看两个函数:
1)简单的一个死循环递归函数:
//这个函数不是真正意义上的递归函数,因为没有结束条件,无法停止退出,所以会一直在控制台打印出hello,
//这样的死循环递归最后会导致浏览器内存溢出宕机
function fn(){
console.log("hello") //执行代码
fn() //调用自身
}
2)常用的递归函数格式:
//计算N到I之间的数之和(N<I)
function fn(n,i){
if(n == i){ //当n 等于i 时, 返回i的值并结束函数(这是这个递归函数的结束条件)
return n
}else{
return fn(n+1,i)+n //当n 不等于 i时,调用fn()函数,得到的返回值加上n的值后返回(这便是递归的核心调用自身)
}
}
在对以上两个函数有一定印象后我们再来说什么是递归函数,递归函数是一类能自我调用的函数,类似循环结构,能做一些重复的运算,在递归函数中最重要的是结束条件和调用自身,当我们知道如何去设置结束条件以及如何再次调用函数时就掌握递归函数了。
让我们再来看看一个递归函数具体的执行过程:
//计算N到I之间的数之和(N<I)
function fn(n,i){
if(n == i){
return n
}else{
return fn(n+1,i)+n
}
}
console.log(fn(5,10)) //在控制台打印5到10之间的数之和
//根据我们输入的参数可以将上面的函数写成
//将n替换为5,i替换为10
function fn(5,10){
if(5 == 10){ //结束条件不满足
return n
}else{ //执行else
return fn(5+1,10)+5 返回的是fn(6,10)+5,那么我们就需要再运行一次fn(),这次的参数是6和10
}
}
//这次将n替换为6,i替换10
function fn(6,10){
if(6 == 10){ //不满足结束条件
return 6
}else{ //执行else
return fn(6+1,i)+6
/*
返回fn(7,10)+6,即fn(6,10)运行后得到的返回值为fn(7,10)+6,换而言之,
fn(5