J.S中的循环控制语句

程序控制语句

  1. 条件控制语句 (根据对应的条件执行对应的代码片段)

  1. 循环控制语句 (根据循环条件循环执行多次对应的代码)

循环控制语句的流程

  • 定义初始值

  • 设置迭代条件(初始值的基础上迭代)

  • 执行的代码 循环体

  • 设置终止条件(布尔类型表达式 返回的是boolean的值(强制转换为boolean类型))

常用的循环控制语句

while;do while;for...

while
//外部定义初始值
var 初始值变量 = 值
while(终止条件(当他为false的时候就会结束对应的循环)){
    //执行的代码 循环体
    //迭代条件
}
示例1
//打印1-100的值
var i = 1
while(i<=100){
    console.log(i)
    i++
}
示例2
//求和 1-100的求和
var i = 1
var sum = 0
while(i<=100){
    console.log(i)
    sum += i
    i++
}
console.log(sum)
注意
  • var关键词修饰的变量进行变量提升 伪全局变量

  • var关键词修饰的变量会被预编译 但是不会读取赋值操作 而是强制赋值undefined

  • 在循环中不建议声明变量 会覆盖之前的值 会加大空间复杂度

while循环嵌套
while(条件){
 while(条件){
     循环体
 }
}
注意
  • 循环嵌套时间复杂度会增加(不建议嵌套超过俩层)

  • 循环嵌套执行的次数为外层循环次数*内层循环次数

示例:

打印乘法口诀表

var row = 1,col //声明行和列
while (row <= 9) { //打印行
    col = 1 //列值返回初始值 为了下一行
    while (col <= row) { //列最大为行数
        document.write(row+'*'+col+'='+row*col+'&emsp;')//在文档上书写内容
        col++
    }
    document.write('<br/>') //换行
    row++
}

打印直角三角形

var row = 0,col
while(row<5){
    col = 0
    //处理列 列和行的关系 行数*2+1
    while(col < row*2+1){
        document.write('*')
        col++
    }
    document.write('<br/>') //换行
    row++
}

打印等腰三角形(个人copy的OPENAI写的后面关于函数方法写出来的拓展题)

function printTriangle(n) {
    var str = ''
    if (isNaN(Number(n))) {
        //console.error('danger')
        throw new Error('danger!')
        }else{
            for (let i = 1; i <= n; i++) {
                for (let j = 1; j <= n - i; j++) {
                    str += ' '
                }
                for (let z = 1; z <= 2 * i - 1; z++) {
                    str += '*'
                }
                str += '\n'
        }
        console.log(str)
    }
}
do while循环
var 初始值变量 = 初始值
do{
    循环体
}while(条件)
do while和while的区别
  1. while 最少执行0次 do while 最少执行一次

  1. do while常用于 先执行对应的内容再判断是否循环(人机交互)

示例
//打印1-100
var i = 1
do{
    console.log(i)
    i++
}while(i<=100)
叫号系统
var code
do {
    code = prompt('请输入你需要叫的编号')
    switch (code * 1) {
        case 1:
            console.log('一号技师为您服务')
            break
        case 2:
            console.log('金牌技师为您服务')
            break
        case 3:
            console.log('88技师为您服务')
            break
    }
} while (code != 1  &&  code != 2 && code != 3)
do while也可以嵌套
//打印四行五列的矩形
var row = 0,
    col, str = ''
do {
    col = 0
    do {
        str += '*'
        col++
    } while (col < 5)
        str += '\n'//换行
    row++
} while (row < 4)
    console.log(str)
for循环

任何循环之间可以互相转换 while循环适用于你不知道执行次数的时候 for循环适用于知道执行次数

for(初始值;迭代条件;迭代量){
    执行的代码 循环体
}
示例
//打印1-100之间的数
for(var i=0;i<100;i++){
    console.log(i+1)
}
//打印1-100之间能整除2和3的数
for(var i=1;i<=100;i++){
    if(i%2==0 && i%3==0){
        console.log(i)
    }
}
//打印1-100之间的偶数和
var sum = 0
for(var i=1;i<=100;i++){
    if(i%2==0){
        sum+=i
    }
}console.log(sum)
for循环嵌套
for(初始值;迭代条件;迭代量){
    for(初始值;迭代条件;迭代量){
        //循环体
    }
}

示例

//打印直角三角形
for(var i=0;i<5;i++){
    for(var j=0;j<2*i+1;j++){
        document.write('*')
    }
    document.write('<br/>')
}
//打印等腰三角形
for(var i=0;i<5;i++){
    var line = ''
    //打印空格
    for(var j=0;j<4-i;j++){
        line += ' '
    }
    //打印*
    for(var j=0;j<2*i+1;j++){
        line += '*'
    }
    console.log(line)
}
//找到1-100之间所有的素数 (只能被自身和1整除)
for(var i=1;i<=100;i++){
    //从2数到自身-1
    var count = 0 //计算因数的个数
    for(var j=2;j<i;j++){
        //用i除以j
        if(i%j==0){ //是有因数
            count++
        }
    }
    if(!count){ //判断因数是否还是0个 如果是0表示当前为素数
        console.log(i)
    }
}
//打印乘法口诀表
for(var i=1;i<=9;i++){
    var line = ''
    for(var j=1;j<=i;j++){
        line+=i+'*'+j+'='+i*j+'\t'
    }
    console.log(line)
}
//打印 1-100所有的偶数每行三个
var line = ''
var count = 0
for (var i = 1; i <= 100; i++) {
    if (i % 2 == 0) {
        count++
        line += (i+'\t')
        //满足了3个条件
        if (count==3) {
            //到达三个加上换行符
            line+='\n'
            //重新计数
            count = 0
        }
    }
}
console.log(line)

循环总结

  1. 循环是用于反复多次执行一段代码

  1. 循环的三种方案可以互相嵌套 以及三种方法可以随意转换 常用的为for和while

  1. while循环用于处理不知道对应的执行次数 for循环常用于知道对应的执行次数

  1. 循环要避免对应的死循环(死循环就是循环的迭代条件一直为true 没有办法停止)

  1. while死循环写法 for死循环写法

while(true){ //死循环
    
}
for(;;){ //死循环
    
}
  • while循环的时间复杂度低于for循环 for循环的执行效率要低于while循环

  • do while循环先做后判断 最少执行一次 while及for最少执行0次

用于循环中的关键词

break 跳出当前循环(跳出当前循环或进程)
示例

//查找1-100内的素数
for(var i=1;i<=100;i++){
    var count = 0
    //再进行对应的整除 用i整除 2-i-1的值 只要有能整除的那么这个数就是不是素数 没有就是素数
    for(var j=2;j<i;j++){
        if(i%j==0){
            count++
            break
        }
    }
    if(count!=1){
        console.log(i)
    }
}
continue(跳过本次循环 进入下一次)
示例
//1-100 逢7过 里面带7和7的倍数跳过
for(var i=1;i<100;i++){
    if(i%7==0 || parseInt(i/10)==7 ||parseInt(i%10)==7){
        continue
    }
    console.log(i)
}
扩展内容
时间复杂度

时间复杂度讲的是恒定机器中的执行次数和对应的变量的比例 也就是说在恒定机器内执行次数越多 那么时间复杂度越高,那么对应的时间复杂度越高 他的执行效率就越低。将时间复杂度降低那么就可以提高对应的效率。

时间复杂度(用O来表示)更对应的执行次数成正比

  1. 常数阶 每行代码执行一次

console.log('123')//1次
console.log('123')//1次
console.log('123')//1次
  1. On 线性阶 循环执行多次由一个n变量来控制

for(var i=0;i<n;i++){
    console.log('123')
}
  1. Ologn 对数阶 由俩个变量来控制的 (递归)

var i = 2
while(i<n){
    i*=k
}
  1. Onlogn 线性对数阶 线性阶包含对数阶

for(var i=0;i<n;i++){
    var j = 2
    while(j<n){
        j*=k
    }
}
  1. On2 平方阶 俩个线性阶包含

for(var i=0;i<n;i++){
    for(var j=0;j<n;j++){
        console.log('123')
    }
}
  1. On3立方阶 3个线性阶

  1. Onk次方 k个线性阶

时间复杂度排序

O1<Ologn<On<Onlogn<On^2<On^3<On^k....

空间复杂度

空间复杂度讲的是在内存开辟上 有多个变量内存被同时开辟,开辟的内存越多对应的空间复杂度越高,占用的内存大小就越大。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值