概述:
所谓递归,其实就是自己调用自己,其中最重要的思想,是怎么划归。
- 函数本身要做一件事,调用一个函数其实就是在做一件事
- 自己调用自己,要做一件事情,就要先做 什么什么
- 如果要做某个事情就是将其转换为已经解决的问题
- f1 调用 f2:如果要做 f1,即先做 f2
- f2 调用 f3:如果要做 f2,即先做 f3 以此类推
- 尽头在哪里呢,也即,临界条件,递归的跳出条件
方法:
- 首先假设已经完成递归函数
//代码可以改写为
function fn(){
//...
fn()
//...
}
- 找出这个转换的条件(难点)
- 找出临界条件
//代码可以改写为
function fn(){
if(临界条件) return
//...
fn()
//...
}
//代码可以改写为
function fn(){
for(){
//...
fn()
//...
}
//...
}
案例:
- 等差数列与等比数列
- 求 第n项: 1 2 3 7 9 --> 2n+1
function normal(n){ return 2n-1 } function fn(n){ return fn(n-1) + 2 } //1.先假设已经实现了 //2.找到转换的规律(递推,找连续项的关系) //3.找临界条件 function fn(n){ if(n == 0) return 1 return fn(n-1) + 2 }
- 差分数列
- 求 第n项: 1 2 4 7 11 16 ...
function fn(n){ if(n = 1) {return 2} else if(n = 0) {return 1} return 2*fn(n-1) - fn(n-2) + 1 }