day 03 循环的使用
循环语句
循环的概念
重复的执行一段的代码,避免死循环,提高效率(时间复杂度(关注) 空间复杂度(不关注)),循环包含三大语句。while语句,do while 语句 for语句
个人见解:循环的作用就是可以不用个人重复写一些相同的代码,或者有规律的代码能节约时间与节约空间,简单来说能节约钱。
循环的三要素
1.初始值(初始的变量值)
2.迭代量 (基于初始值的改变)
3.条件 (基于初始值的判断)
while语句 (与for语句相比,比for语句效率更高)
while(条件表达式(返回true和false)){ 执行的代码 } var 初始值变量 = 值 while(条件){ 迭代量 执行的代码 }
do while (对应的while唯一的区别是先做 后判断 意味最少走一次)
do{ 执行的代码 }while(条件)
var 初始值 = 值 do{ 执行的代码 迭代量变化 }while(条件)
while和do while区别
1.do while 一定会执行一次,而while语句可以一次都不执行。
2.do while是先执行后判断,while是相反的,是先判断后执行所以可以一次都不执行。
for循环(常用的)
for(初始值;条件;迭代量){ //执行的代码 跟if一样如果你执行的代码只有情况下可以省略{} }
面试题 :for(;;) 错了吗(没错的 也意味对应的里面的内容可以被省略,只是死循环)
时间复杂度(判断内容执行效率 依照次数计算)
概述:从传统意义上 对应的代码时间复杂度越低对应的执行速度越快(效率越高)
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循环放在while里面也时间复杂度不变}
for(var i=0;i<100;i++){ var j = 1 //由i和2决定 while(j<100){ j*=2 } }
O(n^2) (双层循环嵌套 平方阶){一把只嵌套两个循环,以为嵌套多了会时间复杂度会进行指数增长,不划算}
for(var i=0;i<100;i++){ for(var j=0;j<100;j++){ console.log('我执行了'+j+'遍') } }
时间复杂度 O(1) < O(logN) <O(n)<O(nlogn)<O(n^2)
while的时间复杂度低于for循环 (算法的优化可以使用while来替代for)、
break
break 跳出代码块 (switch 以及 循环中) 只会跳出当前break所在层的循环(这个循环会被结束)
continue
continue 跳过本次循环(只能在循环内使用)循环还在继续
练习题



//第一题 var sum = 0; var temp = 2000 for (var n1 = 1; n1 <= 20; n1++) { temp += temp * 0.05 } sum = temp console.log(sum.toFixed(2)); //第二题 var sum1 = 0 for (var n2 = 1; n2 <= (50 - 15) / 5; n2++) { sum1++ } console.log('需要' + sum1 + "次才可以把水缸挑满"); //第三题 for (var n3 = 100; n3 <= 200; n3++) { if (n3 % 3 == 0 || n3 % 7 == 0) { console.log(n3); } } //第四题 function text(p) { var sum2 = 1 for (var n4 = 1; n4 <= p; n4++) { sum2 *= n4 } console.log(sum2); } text(10) //第五题 var sum5 = 0 for (var n5 = 1; n5 < 100; n5++) { if (n5 % 2 != 0) { sum5 += n5 } } console.log(sum); //第六题 for (var n7 = 1; n7 < 10; n7++) { for (var n6 = 1; n6 < n7 + 1; n6++) { document.write(n6 + "*" + n7 + '=' + n7 * n6); } document.write('<br/>') } //第七题 var sum7 = 0 for (var n8 = 20; n8 <= 80; n8++) { if (n8 % 3 == 0) { document.write(' ' + n8) sum7++ if (sum7 % 5 == 0) { document.write('<br/>') } } } //第八题 var sum8 = 0 for (var n9 = 1000; n9 <= 2000; n9++) { if (n9 % 4 == 0 && n9 % 100 != 0 || n9 % 400 == 0) { document.write(' ' + n9) sum8++ if (sum8 % 4 == 0) { document.write('<br/>') } } } //第九题 var sum9 = 0 for (var i = 1; i <= 100; i++) { if (i % 2 != 0) { sum9 += 1 / i } else { sum9 -= 1 / i } } document.write(' ' + sum9); //第十题
//第九题 function multiple(a, b) { if (a > b) { for (var i = b; i <= a * b; i++) { if (i % b == 0 && i % a == 0) { document.write(a + '与' + b + '的最小公倍数是' + i); break } } } else if (a < b) { for (var i = a; i <= a * b; i++) { if (i % b == 0 && i % a == 0) { document.write(a + '与' + b + '的最小公倍数是' + i); break } } } else { document.write(a + '与' + b + '的最小公倍数是' + i); } } multiple(45, 30) //第十题 function text(n, a) { var sum = a.toString(); for (var i1 = 1; i1 <= n; i1++) { if (i1 != n) { document.write(' ' + sum.toString() + '+'); sum += a } else if (i1 == n) { document.write(sum); } } // document.write('<br/>') } text(4, 3) //第11题 for (var i2 = 10000; i2 <= 99999; i2++) { if (parseInt((i2 / 10000) % 10) == parseInt(i2 % 10) && parseInt(i2 / 1000 % 10) == parseInt(i2 / 10) % 10) { document.write(' ' + i2 + ' ') } }
//第12题 var temp = 1 var sum = 0 for (var i = 1; i <= 63; i++) { temp *= 2 sum += temp } document.write(sum + 1 + '不能给这太多了,你国家给了你都给不起')
//第13题 function text(n) { var sum = 1 var sum1 = 0 while (n != 0) { for (var i = 1; i <= n; i++) { sum *= i } sum1 += sum sum = 1 n-- } document.write(sum1) } text(5) //第14题水仙花数 for (var i = 100; i <= 999; i++) { if (parseInt(i % 10) * parseInt(i % 10) * parseInt(i % 10) + parseInt((i / 10) % 10) * parseInt((i / 10) % 10) * parseInt((i / 10) % 10) + parseInt((i / 100) % 10) * parseInt((i / 100) % 10) * parseInt((i / 100) % 10) == i) { document.write(i + '是水仙花数') } } //第15题 var l = prompt("请随便输入一个两位的数字") if (!(l * 1) && l != 0) { console.log('别乱输入快给我重新写'); } else if (parseInt(l % 10) > parseInt(l / 10 % 10)) { console.log(parseInt(l / 10 % 10) + '' + parseInt(l % 10)); } else if (parseInt(l % 10) < parseInt(l / 10 % 10)) { console.log(parseInt(l % 10) + '' + parseInt(l / 10 % 10)); } //第16题 function text2(a, b) { var temp = 0 if (a > b) { for (var i = 1; i <= b; i++) { if (a % i == 0 && b % i == 0) { temp = i } } console.log(temp); } else if (a < b) { for (var i = 1; i <= a; i++) { if (a % i == 0 && b % i == 0) { temp = i } } console.log(temp); }else{ console.log('error'); } } text2(12,8)

浙公网安备 33010602011771号