循环语句
2024-04-10 02:10:05  阅读数 481

循环语句

循环的概念

重复的执行一段代码,避免死循环,提高效率(时间复杂度-关注 和 空间复杂度-不关注)

循环包含三大语句:while语句、do while语句、for语句

循环的三要素:

初始值(初始的变量)

迭代量(基于初始的改变)

条件(基于初始的判断)

while语句

while(条件表达式(返回true和false)){

    执行的代码

}

var初始值变量=值

while(条件){

    迭代量

    执行的代码

}

示例(循环打印1-10)

var i=1

while(i<=10){

    console.log(i)

    i++

}

示例(循环打印1加到100)

//  1加到100

var number=0

var sum=0

while(number<100) {

    number++

    sum+=number

}

console.log(sum);

//  100加到1

var i=100

var sum=0

while(i>=1) {

sum+=i

i--

}

console.log(sum);

注意: 

1、while循环必须按照上述语法格式来写, 只能更改表达式内容和执行代码.

2、表达式可以是常量,变量或者其他表达式,该表达式会被强制转换为boolean类型, 可以理解表达式就是循环的条件, 条件成立则进入括号{}里面执行代码,否则不进入;

3、执行代码可以有多行, {}所包含的称为循环体.

4、表达式不要一直是true, 避免死循环.

5、while循环的顺序是: 先判断表达式是否为true, 若true则执行执行代码, 然后再继续判断表达式是否为true,… 直到判断表达式为false才会跳出循环, 执行while后面的代码

时间复杂度(判断内容执行效率 依照次数执行计算)

do while(对应的while唯一的区别是先做 意味最少走一次)

do{

    执行的代码

}while(条件)

var初始值=值

do{

    执行的代码

    迭代量变化

}while(条件)

示例

var isEmpty=true

do{

    console.log('有人不');

    isEmpty=false;

}while(isEmpty)

1+2+...+100

var i=0

var sum=0

do{

    i++

    sum+=i

}while(i<100)

while和do while区别

while是先判断后执行 do while 先执行后判断

do while 最少执行一次 while最少执行0次

常用while来写一些执行多次的内容(最少没规定) do while(规定必须要执行的时候)

for循环(常用的)

for(初始值;条件;迭代量){

    //执行的代码 跟if一样 如果你执行的代码只有一种情况下可以省略{}

}

示例(1+2+...+100)

var sum=0

for(var i=0;i<100;i++){

    sum+=i

}

面试题:for(;;)错了吗 (没错的 也意味着对应的里面的内容可以被省略)

for(;;){

    console.log('hello');

}

//死循环 省略迭代量 和 条件 必定是死循环

vari=0

for(;i<100;i++){

    console.log('我执行了'+i+'遍');

}

console.log(i);//100

时间复杂度(判断内容执行效率 依照次数计算)

概述:从传统意义上对应的代码时间复杂度越低对应的执行速度越快(效率越高)

O(1)(每行只执行一遍)

var i=0

i++

if(i<10){

    console.log(i)

}

O(logN)(俩个值来决定 对数阶)

var i=1//由i和2决定

while(i<100){

    i*=2

}

O(n)(由对应的一个值来决定的 线性阶)

for(var i=0;i<100;i++){

    console.log('我执行了'+i+'遍')

}

O(nlogn)(循环嵌套对应的数阶循环 线性对数阶)

for(var i=0;i<100;i++){

    varj=1//由i和2决定

    while(j<100){

        j*=2

    }

}

O(n^2)(双层循环嵌套 平方阶)

for(var i=0;i<100;i++){

    for(varj=0;j<100;j++){

console.log('我执行了'+j+'遍')

   }

}

时间复杂度O(1)<O(logN)<O(n)<O(nlogn)<O(n^2)

while的时间复杂度低于for循环(算法的优化可以使用while来替代for)

循环嵌套(将多个循环嵌套在一起)

示例:打印一个正方形

//外层循环控制行  内层循环控制列

var row=4

var col=10

for(var i=0;i<row;i++){

    var j=0

    //每行的字符串

    var rowStr=""

    while(j<col){

        //字符串拼接

        rowStr+='+'

    }

    document.write(rowStr+"<br>")

}

//执行次数 外层循环次数*内层循环次数

循环嵌套最多套俩层O(n^2)

示例:打印三角形

for(var i=0;i<6;i++){

    //内层的循环条件依赖于外层

    var str=''

    for(var j=0;j<i;j++){

    str+='*'

    }

    document.write(str+"<br>")

}

break

break跳出代码块(switch以及循环中)只会跳出当前break所在层的循环(这个循环会被结束)

示例

// 1、判断一个数是不是合数。(指自然数中除了能被1和本身整除外, 还能被其他的数整除( 不包括0) 的数。)

var number=prompt()

//判断是否它有可以被除自身和1之外整除的数

for(var i=2;i<number;i++) {

if(number%i==0) {

alert("当前数为合数");

break;

   }

}

// 2、判断一个数是不是素数。(除了1和它本身以外不再有其他的除数整除。)

var count=0

for(var i=2;i<number;i++) {

if(number%i==0) {

count++

break;

   }

}

if(count==0){

console.log("当前数为素数");

}

示例讲解(break练习)

//看代码判断打印的内容

var number//undefined

for(var i=0;i<3;i++) {// i 0 1 2

for(var j=0;j<i;j++) {//i为0的时候 没有东西

if(i==1||j>=1) {

number=i*j

console.log(j);//0 1

break

console.log(i);//break后面的内容不会走

       }

   }

console.log(number);//3次 undefined 0 2

}

//undefined 0 0 1 2

continue

continue跳过本次循环(只能在循环内使用)循环还在继续

//  1、求整数1~100的累加值,但要求跳过所有个位为3的数

var sum=0//接受对应的累加值

for(var i=1;i<=100;i++) {

if(i%10==3) {

continue;//遇到continue跳过本次开始下一次循环

   }

sum+=i

}

document.write(sum);