递归传参的几个注意点-12.12(day16)

在写关于二叉树的算法时,递归是我们绝对会用到的方法,但是昨天写了一道相关算法之后,看了看答案才发现递归过程中参数的写法也是有要求的。

以下代码演示之外的a++、++a、a+1、a+=1中的a都代指变量。

        首先大家要了解a++和++a有什么区别:无论是a++还是++a,它们都相当于是a+=1,只不过++a是先计算+1,a++是后计算+1.举个例子

let a = 0, b = 0
function add(a, b) {
    console.log('add', a) //'add',0
    console.log('add', b) //'add',1
}
add(a++, ++b)
console.log(a) //1
console.log(b) //1

可以看到,传入a++和++b时候的区别:传入a++时,函数中还是a原来的数据,直到下一次使用a的值才会改变;传入++a时,函数中a的数据会及时改变。需要注意的是:使用这两种写法,原来的值也将改变(即在其他位置使用该值时也会加一)。因此在无论是在递归过程中还是在使用函数的时候,都要注意传递的参数要求以及函数外该变量的使用情况。

        接下来就是区分写a++和++a时与直接写a+=1的区别,举个例子:

let a = 0, b = 0, c = 0
function add(a, b, c) {
    console.log('add', a) //add 1
    console.log('add', b) //add 1
    console.log('add', c) //add 0
}
add(a+1, ++b, c++)
console.log(a) //0
console.log(b) //1
console.log(c) //1

可以看到:传入a+1时,函数中的值会随之变化,但是并不影响函数外该变量的值。

至于传入a+=1,它的效果和++a是相同的:函数中的值随之改变,函数外的值也会改变。

        最后就是演示一下当连续调用两次函数时a++、++a以及a+1的区别(用以模拟二叉树遍历中需要左右节点的两次递归):

//连续两次a++
let a = 0
function add(a){
    console.log(a);
}
add(a++)
add(a++)
console.log('out',a);

//连续两次++a
let a = 0
function add(a){
    console.log(a);
}
add(++a)
add(++a)
console.log('out',a);

//连续两次a+1
let a = 0
function add(a){
    console.log(a);
}
add(a+1)
add(a+1)
console.log('out',a);

综上所述:当在递归时,连续使用两次递归,如果使用a++或者++a会影响到下一次递归的初始值,所以大家在做算法时一定要注意题目需求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值