程序控制语句
- 条件控制语句 (根据对应的条件执行对应的代码片段)
- 循环控制语句 (根据循环条件循环执行多次对应的代码)
循环控制语句的流程
- 定义**初始值**
- 设置**迭代条件**(初始值的基础上迭代)
- 执行的代码 **循环体**
- 设置**终止条件** (布尔类型表达式 返回的是boolean的值(强制转换为boolean类型))
常用的循环控制语句
- while
- do while
- for
- ...
while循环
//外部定义初始值
var 初始值变量 = 值
while(终止条件(当他为false的时候就会结束对应的循环)){
//执行的代码 循环体
//迭代条件
}
var关键词修饰的变量进行变量提升 伪全局变量
var关键词修饰的变量会被预编译 但是不会读取赋值操作 而是强制赋值undefined
在循环中不建议声明变量 会覆盖之前的值 会加大空间复杂度
while循环嵌套
while(条件){
while(条件){
循环体
}
}
循环嵌套时间复杂度会增加(不建议嵌套超过俩层)
循环嵌套执行的次数为外层循环次数*内层循环次数
do while循环
var 初始值变量 = 初始值
do{
循环体
}while(条件)
do while和while的区别
while 最少执行0次 do while 最少执行一次
do while常用于 先执行对应的内容再判断是否循环(人机交互)
for循环
任何循环之间可以互相转换 while循环适用于你不知道执行次数的时候 for循环适用于知道执行次数
for(初始值;迭代条件;迭代量){
执行的代码 循环体
}
for循环嵌套
任意循环可以互相嵌套
for(初始值;迭代条件;迭代量){
//循环体
}
}
循环总结
循环是用于反复多次执行一段代码
循环的三种方案可以互相嵌套 以及三种方法可以随意转换 常用的为for和while
while循环用于处理不知道对应的执行次数 for循环常用于知道对应的执行次数
循环要避免对应的死循环(死循环就是循环的迭代条件一直为true 没有办法停止)
while死循环写法 for死循环写法
while(true){ //死循环
}
for(;;){ //死循环
}
while循环的时间复杂度低于for循环 for循环的执行效率要低于while循环
do while循环先做后判断 最少执行一次 while及for最少执行0次
用于循环中的关键词
break 跳出当前循环(跳出switch块)
continue 跳过本次循环 进入下一次
扩展内容
## 扩展内容
#### 时间复杂度
时间复杂度讲的是恒定机器中的执行次数和对应的变量的比例 也就是说在恒定机器内执行次数越多 那么时间复杂度越高,那么对应的时间复杂度越高 他的执行效率就越低。将时间复杂度降低那么就可以提高对应的效率。
##### 时间复杂度(用O来表示)跟对应的执行次数成正比
O1 常数阶 每行代码执行一次
```js
console.log('123')//1次
console.log('123')//1次
console.log('123')//1次
console.log('123')//1次
```
On 线性阶 循环执行多次由一个n变量来控制
```js
for(var i=0;i<n;i++){
console.log('123')
}
```
Ologn 对数阶 由俩个变量来控制的 (递归)
```js
var i = 2
while(i<n){
i*=k
}
```
Onlogn 线性对数阶 线性阶包含对数阶
```js
for(var i=0;i<n;i++){
var j = 2
while(j<n){
j*=k
}
}
```
On2 平方阶 俩个线性阶包含
```js
for(var i=0;i<n;i++){
for(var j=0;j<n;j++){
console.log('123')
}
}
```
On3立方阶 3个线性阶
Onk次方 k个线性阶
...
###### 时间复杂度排序
O1<Ologn<On<Onlogn<On^2<On^3<On^k....
#### 空间复杂度
空间复杂度讲的是在内存开辟上 有多个变量内存被同时开辟,开辟的内存越多对应的空间复杂度越高,占用的内存大小就越大。
例子
// 11, 五位数中,对称的数称为回文数,找出所有的回文数。
// 如: 12321
// for (i = 10000; i <= 99999; i++) {
// g = i % 10
// s = parseInt(i / 10 % 10)
// b = parseInt(i / 100 % 10)
// q = parseInt(i / 1000 % 10)
// w = parseInt(i / 10000 % 10)
// if (g == w && s == q) {
// console.log(i);
// }
// }
var x=1234321
var y=0//定义接收反转的内容
//如果当前是小于10的整数 都是回文
if(x<10 && x>=0){
console.log("当前是回文");
}
//反转条件 x>y
while(x>y){
y=y*10+x%10
x=parseInt(x/10)
}
//偶数位
if(x==y){
//回文
console.log("回文");
}else if(parseInt(y/10)==x){
//奇数位
console.log("回文");
}else{
console.log("不是回文");
}