美文网首页
递归求数组的和+异或运算

递归求数组的和+异或运算

作者: 哑巴湖大水怪吖 | 来源:发表于2022-06-13 15:55 被阅读0次

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
所以,相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。
image.png

2. 与运算 &

0与任何数 进行 & 运算都为 0
**

  1. 清零 :如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。
var a = 13;
var b = a & 0;
console.log(b) // 0
  1. 判断奇偶: 只要根据最未位是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)
}

相关文章

网友评论

      本文标题:递归求数组的和+异或运算

      本文链接:https://www.haomeiwen.com/subject/vxpomrtx.html