递归
1、定义:在函数的定义中使用函数自身的方法
2、列子:递归-斐波拉契数列
f(n)=f(n-1)+f(n-2) //n>=2
f(n)=0 //n==0
f(n)=1 //n==1
3、递归的基本思路
目标:解决一个规模为n的问题
思路:
n=1的时候,问题太简单了
n=2的时候,问题也挺简单
如果已经解决了n=k-1,能解决n=k吗
如果已经解决了n=k/2,能解决n=k吗
每一步有多种选择,不知道哪个对。。。
递归的应用:
1、全排列问题
将1..n排列的所有方案
2、组合问题
从1..n里面取k个数的所有方案
3、带条件的排列组合
从a[1..n]数组里面取k个数 使得其和为
4、八皇后问题
带条件的全排
递归:求枚举出3位数每位数字可以取1…3的所有可能
const arr = [];
function every(n){
const arr = n.split(''");
if(n==0){
ewturn arr
}
for(let i =1 ;i<4;i++){
arr[n] = i
every(n-1)
}
}
从1…k里面取n个数的所有组合
思想:
从目表中取出0个数
f(0) = 0
f(1) = f(0) +k
f(2) = f(1) + k-1
f(3) = f(2) + k-2
...
f(n-1) = f(n-2) + k-n
f(n) = f(n-1) + k-n+1