【JavaScript编程】递归

递归


定义

程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。


实例

问题1:求n个整数的积?

分析2:

nf()
1f(1) = 1
2f(2) = 2 x f(1)
3f(3) = 3 x f(2)
nf(n) = n x f(n-1)

代码如下:

var f = function(n) {
    if (n === 1) return 1
    return n * f(n - 1)
}
console.log(f(5)) // 120

问题2:1个细胞,一个小时分裂一次,生命周期是3小时,求n小时后容器内,有多少细胞?

分析2:n小时后的细胞数 = 之前的细胞总数 x 2(一分为二)- 3小时前分裂出来的细胞数(死亡)

小时 n细胞总数 t()当时分裂出来的细胞数 c()
0t(0) = 1c(0) = 1
1t(1) = t(0) x 2c(1) = c(0)
2t(2) = t(1) x 2c(2) = c(1) + c(0)
3t(3) = t(2) x 2 - c(0)c(3) = c(2) + c(1) + c(0)
4t(4) = t(3) x 2 - c(1)c(4) = c(3) + c(2) + c(1)
nt(n) = t(n-1) x 2 - c(n-3)c(n) = c(n-1) + c(n-2) + c(n-3)

代码如下:

// 细胞总数
var total = function(n) {
    if (n === 0) return 1
    return total(n - 1) * 2 - current(n - 3)
}
// 当时分裂出来的细胞数
var current = function(n) {
    if (n === 0) return 1
    if (n < 0) return 0
    return current(n - 1) + current(n - 2) + current(n - 3)
}
console.log(total(5)) // 24

必要因素

1、递归方程
  • 在有限次可预见的结果中,找到结果与上一次或几次结果之间的关系。
  • 在草稿纸上写出前几次的结果,或者画图,这样更容易找到规律,这种规律实际上就是递归方程。
2、递归边界条件

即已知条件,如上述的 n=0 时的已知结果。这就是递归的边界条件,因为递归不能无限制地调用本身。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值