js逻辑理解01

1.计算1-100的和

function sun100(n) {
  let result = 0;
  for (let i = 1; i <= n; i++) {
    result += i;
  }
  return result;
}
console.log(sun100(100));
function sum100_2(n) {
  return n > 1 ? n + sum100_2(n - 1) : n;
}
console.log(sum100_2(100));
function sum100_3(n) {
  return n * (n + 1) / 2;

}
console.log(sum100_3(100));
function sum100_4(n) {
  let i = 1;
  let sum = 0;
  while (i <= n) {
    sum += i;
    i++;
  }
  return sum;
}

console.log(sum100_4(100));

// 2.求出1-1/2+1/3-1/4+1/…100的和

function makeSum() {
  let end = 1;
  let sum = 0;
  for (let i = 1; i <= 100; i++) {
    i % 2 === 0 ? end = -1 : end = 1;
    sum += end / i;

  }
  return sum;

}
console.log(makeSum());
function makeSum_2() {
  let i = 1;
  let sum = 0;
  while (i <= 100) {
    if (i % 2 === 1) {
      sum += 1 / i;
    } else {
      sum -= 1 / i;
    }
    i++;
  }
  return sum;

}

console.log(makeSum_2());

3.打印出1000-2000年中所有的闰年,并以每行四个数的形式输出

function printYear() {
  let i = 1000;
  let count = 0;
  while (i <= 2000) {
    if (i % 4 === 0 && i % 100 !== 0 || i / 400 === 0) {
      if (count % 4 === 0 && count !== 0) {
        console.log('/n');
      }
      console.log(i);
      count++;
    }
    i++;
  }

}

printYear();

4.打印100以内7的倍数


function print_7n() {
  let i = 1;
  while (i <= 100) {
    if (i % 7 === 0) {
      console.log(i);
    }
    i++;
  }

}

print_7n();

5.打印100以内所有偶数的和

function Sum_ouShu() {
  let i = 1;
  let sum = 0;
  while (i <= 100) {
    if (i % 2 === 0) {
      sum += i;
    }
    i++;
  }
  return sum;
}

console.log(Sum_ouShu());

6.判断一个数是不是素数

function isPrime(n) {
  if (n < 2) {
    return false;
  } else {
    if (n===2) return true;
    for (let j = 2; j < n; j++) {
      return j % n !== 0;
    }
  }

}

console.log(isPrime(9));

7.如何每间隔一秒输出from,到to的值

function printNumbers(from, to) {
  //打印从from开始,但是to是不变的,但是因为参数是恒定的,所以我们需要声明一个变量来保存from,及让参数具有可变性...
  let current = from;
  //如何打印多次值呢?js中需要进行循环或者是递归才能输出多次,你这样直接if在最外面是不能让程序有循环性的。
  setTimeout(function go() {
    if (current < to) {
      console.log(current);
      setTimeout(go, 1000); // 嵌套使用setTimeout相当于递归,满足条件的情况下一直执行,不满足条件才会跳出,相当于让if具有了循环性。
    }
    current++; //改变条件
  }, 1000);
}

printNumbers(3, 20);
function printNumbers(from, to) {
  let current = from;
  //创建重复调用定时器,并得到其唯一标识间隔的间隔 ID,当条件满足就清除定时器
  let timeId = setInterval(() => {
    console.log(current);
    if (current === to) {
      clearInterval(timeId);
    }
    current++;
  }, 1000);
}

printNumbers(3, 10);

如果我们还希望函数立即运行,那么我们可以在单独的一行上添加一个额外的调用,像这样:

function printNumbers(from, to) {
  let current = from;

  function go() {
    alert(current);
    if (current == to) {
      clearInterval(timerId);
    }
    current++;
  }

  go();
  let timerId = setInterval(go, 1000);
}

printNumbers(5, 10);

8.实现pow(x,n) 实现 x 的 n 次幂

function pow(x, n) {
  //使用一个内部变量保存x参数的值,不要直接使用x,比如3*3 =9, 9*3=27, 而不是比如x变为9,x*x = 81
  let rr = x;
  //for循环,使用循环来遍历n,从而实现n 个 x 相乘
  // i 这里必须从1开始,而不是0,因为 0 * x = 0
  for (let i = 1; i < n; i++) {
    //每循环一次rr乘一次x
    rr *= x;
  }
  return rr;
}
console.log(pow(2, 3));

function pow(x, n) {
  return (n > 1) ? x * pow(x, n - 1) : x;

}

console.log(pow(2, 3));

9.数组连续最大和

function getMaxSubSum(arr) {
  let subSum = 0;
  for (let i = 0; i < arr.length; i++) {
    let tmpSum = 0;
    for (let j = i; j < arr.length; j++) {
      tmpSum += arr[j];
      subSum = Math.max(subSum, tmpSum);
    }
  }
  return subSum;

}

console.log(getMaxSubSum([-1, 2, 3, -9]));

10.输出当月到之前12个月的‘xxxx年xx月’的数组

var _date=[],dateData=["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"];
//准备一个月份反转的数组
var dateDataRet=Object.assign([],dateData).reverse();
//获取当前年份
var yearText=new Date().getFullYear();
//获取当前月份  调试的时候,大家可以通过调整now调试  3月-now=2,12月now=11...
var now=new Date().getMonth();
for(let i=0;i<12;i++){
    if(now-i<0){
        //如果now-i<0,从dateDataRet里面拿数据,下标=|now-i|-1。
        _date.push(yearText-1+'年'+dateDataRet[Math.abs(now-i)-1]);
    }
    else{
        //从dateData里面拿数据,下标=now-i
        _date.push(yearText+'年'+dateData[now-i]);
    }

}
_date.reverse();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值