求n的阶乘
已知1的阶乘为1。
步骤分析:递归 - 找规律、找出口,出口找到,依次往前推即可。
// 求阶乘的函数
function mul(n) {
if(n === 1) {
return 1
}
return n * mul(n-1)
}
var res = mul(10)
console.log(res) // 3628800
/*
* mul(10) ---> 10 * mul(9)
* mul(9) ----> 9 * mul(8)
* mul(8) ---> 8 * mul(7)
* mul(7) ---> 7 * mul(6)
* mul(6) ---> 6 * mul(5)
* mul(5) ---> 5 * mul(4)
* mul(4) ---> 4 * mul(3)
* mul(3) ---> 3 * mul(2)
* mul(2) ---> 2 * mul(1)
* 当n为1时,返回1,所以mul(2)的阶乘为 2 * 1 = 2
* 所以,mul(3)的阶乘为 3 * 2 = 6
* mul(4)的阶乘为 4 * 6 = 24
* mul(5)的阶乘为 5 * 24 = 120
* mul(6)的阶乘为 6 * 120 = 720
* mul(7)的阶乘为 7 * 720 = 5040
* mul(8)的阶乘为 8 * 5040 = 40320
* mul(9)的阶乘为 9 * 40320 = 362880
* mul(10)的阶乘为 10 * 362880 = 3628800
* */
费波那切数列
已知第一位和第二位都是1。
分析:第n位是 (n-1)和(n-2)之和,出口:n为1和2时,都返回1
function FB(n) {
if(n === 1 || n === 2) {
return 1
}
return FB(n -1) + FB(n - 2)
}
var res = FB(5)
console.log(res) // 5
/**
* FB(5) -----> FB(4) + FB(3)
* FB(4) -----> FB(3) + FB(2)
* FB(3) ----> FB(2) + FB(1)
* 当n为1和2时,都返回1
* 所以,
* FB(3) = 1 + 1
* FB(4) = 2 + 1
* FB(5) = 3 + 2
* 最后结果为:5
* /