1. 递归求数组的和
const list = [1,2,3,4,5];
function getSum(list){
function sum(i){
return i >= list.length ? 0 : list[i] + sum(i+1)
}
return sum(0)
}
return sum(0) 调用内层递归函数,当 i 的值等于要计算的数组的长度的时候递归结束,否则就递归计算
2.位运算:
从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。
int a = 35;
int b = 47;
int c = a + b;
计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的 int 变量会在机器内部先转换为二进制在进行相加:
35: 0 0 1 0 0 0 1 1
47: 0 0 1 0 1 1 1 1
————————————————————
82: 0 1 0 1 0 0 1 0
所以,相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。
![](https://img.haomeiwen.com/i27800405/64e25c09933d9208.png)
2. 与运算 &
0与任何数 进行 & 运算都为 0
**
- 清零 :如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
var a = 13;
var b = a & 0;
console.log(b) // 0
- 判断奇偶: 只要根据最未位是0还是1来决定,为0就是偶数,为1就是奇数。因此可以用 if ((a & 1) == 0) 代替if (a % 2 == 0)来判断a是不是偶数。
(22 & 1) == 0
// true
3.判断数字 X 是否是 2 的N次方, X > 0 且为整数
function isPowerOf2(x){
return (x & (x-1)) === 0
}
3. 异或运算 ^
任何数和自己进行 ^ 运算 结果为 0
任何数和 0 进行 ^ 运算 结果为 任何数
数组中的数据必须只有一个为单独的一个
let arr = [2,2,3,3,1]
function f(list){
return list.reduce((a,b) => a ^ b ,0)
}
网友评论