06_循环和递归
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
=true
表达式
=false
do/while 循环语句
语法格式
[init_statement] do{ body_statement; [alter_statement;] }while( test_exp);
应用举例
public class WhileLoop { public static void main(String args[]){ int result = 0, int i=1; do{ result += i; i++; }while(i<=100); System.out.println("result=" + result); } }
while语句与do…while语句的区别: 当第一次 执行时,若表达式=fales时,则while语句与do … while有所不同,do … while 执行一次后面的语句,而 while不执行。
38
Ex1 1. 编 写 程 序 , 用 一 个 for 循 环 计 算 1 + 3 + 5 + 7 + ……+ 99的值,并输出计算结果。 2. 使用其它循环----while, do while 分别实现上 述任务。
}
特殊流程控制语句
continue 语句
continue语句用于跳过某个循环语句块的一次执行 continue语句出现在多层嵌套的循环语句体中时,可以通过 标签指明要跳过的是哪一层循环
continue语句用法举例1
public class ContinueTest { public static void main(String args[]){ for (int i = 0; i < 100; i++) { if (i%10==0) continue; System.out.println(i); } } }
特殊流程控制语句
break 语句
break语句用于终止某个语句块的执行
{ …… break; …… }
break语句出现在多层嵌套的语句块中时,可以通过标签指明要 终止的是哪一层语句块
label1: label2: label3: { …… { …… { …… break label2; …… } } }
软件工程师培训讲义
第六课
循环和递归
本课内容 循环语句
– for 循环 – while 循环 – do-while 循环
特殊的循环控制语句 递归
循环语句
循环语句功能
在循环条件满足的情况下,反复执行特定代码
循环语句的四个组成部分
初始化部分(init_statement) 循环条件部分(test_exp) 循环体部分(body_statement) 迭代部分(alter_statement)
若同时省略表达式1,表达式3,则相当于while(表 达式2)语句。 例: for (; i<=100;) {sum+=i; i++;} 相当于 while (i<=100) { sum+=i; i++; }
三个表达式均省略 即for(;;)语句,此时相当于 while(true)语句. 表达式1、表达式3可以是逗号表达式,以使循环 变量值在修改时可以对其它变量赋值。 例如:for (sum=0, i=1; i<=100; i++, i++) 等价于:sum=0; for (i=1; i<=100; i=i+2)
注意事项
while后面的语句一般为语句块, 即:加{ }
语句中应有使表达式=false的语句。 否则会出现无限循环–––"死"循环。
do/while 循环语句 一种专门的“ 直到型” 循环语句。 1. 形式: do 语句 while(表达式); 2. 执行过程: 先执行语句,再判表达式的值,若为true, 再执行语句,否则结束循环 3. 流程: 语句
for语句的几种特例 表达式2一般不可省略,否则为无限循环 例: for (i=1; ; i++) sum=sum+i; 相当于条件永真、永不为false,若用while表示 相当于: while (true) { sum=sum+i; i++; }
表达式3亦可省略,但在循环体中须有语句修改循 环变量;以使表达式2在某一时刻为false而正常结束 循环。 例: for (sum=0,i=1;i<=100;) { sum=sum+i; i++; }
Ex2 编写程序,采用适当的循环和流控制语句 实现下述功能:打印输出0~200之间能被7 整除但不能被4整除的所有整数;要求每行 显示6个数据;
Ex3 编写程序(方法),采用适当的循环和流控制 语句实现下述功能:输出参数指定数据 (整数)的所有素数因子 练习目的:体会和巩固循环语句、分支语 句、流控制语句、表达式的计算次序、逻 辑运算符的用法;
Ex5(编程思想训练)
汉诺塔(Tower of Hanoi)问题
求得范围缩小的同性质问题的结果 利用这个已得到的结果和几个简单的操作求得问题的 最后解答。
当同性质的问题被简化得足够简单时,将可 直接获得问题的答案,而不必再调用自身。
Ex4(编程思想训练) 求Fibonacci数列: 1, 1, 2, 3, 5, 8, …第40个数的值。 规律: F1=1, F2=1 Fn=Fn – 1 + Fn – 2 程序要点: 1.使用递归: 2.不使用递归: (n>2)
特殊流程控制语句
break 语句用法举例
public class TestBreak{ public static void main(String args[]){ for(int i = 0; i<10; i++){ if(i==3) break; System.out.println(" i =" + i); } System.out.println("Game Over!"); }
while 循环语句 while语句(“当”型循环) 形式: while (boolean表达式) 语句 执行过程: 先判断表达式的值。若=true.则执行其后 面的语句,然后再次判断条件并反复执 行,直到条件不成立为止范例:
while 循环语句
语法格式
[init_statement] while( test_exp){ body_statement; [alter_statement;] }
特殊流程控制语句 continue语句用法举例2
public class PrimeNumber{ public static void main(String args[]){ int n = 0; outer: for(int i=101;i<200;i+=2){ //外层循环 for(int j=2; j<i;j++){ //内层循环 if(i%j==0) continue outer; //不能使用 "break" ,为什么? } System.out.print(" " + i); n++; if(n<6 ) continue; System.out.println(); //输出六个数据后换行 n = 0; } } }
应用举例
public class WhileLoop { public static void main(String args[]){ int result = 0; int i=1; while(i<=100) { result += i; i++; } System.out.println("result=" + result); } }
递归
问题:求给定整数的阶乘,如何实现?
1. 使用循环语句…… 2. 使用递归
public int methodl(int n){ if(n == 1) return 1; else return n*method1(n-1); }
范例0604
递归调用 Test.java
递归的基本思想和要素 递归的基本思想是“依次类推”。 递归方法解决问题的两个步骤:
几种循环的比较
1. 对于同一问题, 三种循环可相互替代。 2. for循环功能强于while, do…while.但若不是明显 地给出循环变量初终值(或修改条件),则应用 while 或do …while.以增强程序的结构化和可读 性。 3. 要防止无限循环––死循环。 4. 循环过程中,为了结束本次循环或跳出整个循环。 分别要用到下述的continue和break语句。
流程: 计算表达式1 求表达式源自文库值
=true =false
语句 计算表达式3
结束for语句
for 循环语句
语法格式
for (init_statement; test_exp; alter_statement){ body_statement }
应用举例
public class ForLoop { public static void main(String args[]){ int result = 0; for(int i=1; i<=100; i++) { result += i; } System.out.println("result=" + result); } }
循环语句分类
for 循环 while 循环 do/while 循环
for 循环语句 1. 形式 for(表达式1; 表达式2; 表达式3) 语句 2.执行过程 首先计算表达式1,接着执行表达式2,若表达式2 的值=ture,则执行语句,接着计算表达式3,再判断表 达式2的值.依此重复下去,直到表达式2的值=false。
表达式
=false
do/while 循环语句
语法格式
[init_statement] do{ body_statement; [alter_statement;] }while( test_exp);
应用举例
public class WhileLoop { public static void main(String args[]){ int result = 0, int i=1; do{ result += i; i++; }while(i<=100); System.out.println("result=" + result); } }
while语句与do…while语句的区别: 当第一次 执行时,若表达式=fales时,则while语句与do … while有所不同,do … while 执行一次后面的语句,而 while不执行。
38
Ex1 1. 编 写 程 序 , 用 一 个 for 循 环 计 算 1 + 3 + 5 + 7 + ……+ 99的值,并输出计算结果。 2. 使用其它循环----while, do while 分别实现上 述任务。
}
特殊流程控制语句
continue 语句
continue语句用于跳过某个循环语句块的一次执行 continue语句出现在多层嵌套的循环语句体中时,可以通过 标签指明要跳过的是哪一层循环
continue语句用法举例1
public class ContinueTest { public static void main(String args[]){ for (int i = 0; i < 100; i++) { if (i%10==0) continue; System.out.println(i); } } }
特殊流程控制语句
break 语句
break语句用于终止某个语句块的执行
{ …… break; …… }
break语句出现在多层嵌套的语句块中时,可以通过标签指明要 终止的是哪一层语句块
label1: label2: label3: { …… { …… { …… break label2; …… } } }
软件工程师培训讲义
第六课
循环和递归
本课内容 循环语句
– for 循环 – while 循环 – do-while 循环
特殊的循环控制语句 递归
循环语句
循环语句功能
在循环条件满足的情况下,反复执行特定代码
循环语句的四个组成部分
初始化部分(init_statement) 循环条件部分(test_exp) 循环体部分(body_statement) 迭代部分(alter_statement)
若同时省略表达式1,表达式3,则相当于while(表 达式2)语句。 例: for (; i<=100;) {sum+=i; i++;} 相当于 while (i<=100) { sum+=i; i++; }
三个表达式均省略 即for(;;)语句,此时相当于 while(true)语句. 表达式1、表达式3可以是逗号表达式,以使循环 变量值在修改时可以对其它变量赋值。 例如:for (sum=0, i=1; i<=100; i++, i++) 等价于:sum=0; for (i=1; i<=100; i=i+2)
注意事项
while后面的语句一般为语句块, 即:加{ }
语句中应有使表达式=false的语句。 否则会出现无限循环–––"死"循环。
do/while 循环语句 一种专门的“ 直到型” 循环语句。 1. 形式: do 语句 while(表达式); 2. 执行过程: 先执行语句,再判表达式的值,若为true, 再执行语句,否则结束循环 3. 流程: 语句
for语句的几种特例 表达式2一般不可省略,否则为无限循环 例: for (i=1; ; i++) sum=sum+i; 相当于条件永真、永不为false,若用while表示 相当于: while (true) { sum=sum+i; i++; }
表达式3亦可省略,但在循环体中须有语句修改循 环变量;以使表达式2在某一时刻为false而正常结束 循环。 例: for (sum=0,i=1;i<=100;) { sum=sum+i; i++; }
Ex2 编写程序,采用适当的循环和流控制语句 实现下述功能:打印输出0~200之间能被7 整除但不能被4整除的所有整数;要求每行 显示6个数据;
Ex3 编写程序(方法),采用适当的循环和流控制 语句实现下述功能:输出参数指定数据 (整数)的所有素数因子 练习目的:体会和巩固循环语句、分支语 句、流控制语句、表达式的计算次序、逻 辑运算符的用法;
Ex5(编程思想训练)
汉诺塔(Tower of Hanoi)问题
求得范围缩小的同性质问题的结果 利用这个已得到的结果和几个简单的操作求得问题的 最后解答。
当同性质的问题被简化得足够简单时,将可 直接获得问题的答案,而不必再调用自身。
Ex4(编程思想训练) 求Fibonacci数列: 1, 1, 2, 3, 5, 8, …第40个数的值。 规律: F1=1, F2=1 Fn=Fn – 1 + Fn – 2 程序要点: 1.使用递归: 2.不使用递归: (n>2)
特殊流程控制语句
break 语句用法举例
public class TestBreak{ public static void main(String args[]){ for(int i = 0; i<10; i++){ if(i==3) break; System.out.println(" i =" + i); } System.out.println("Game Over!"); }
while 循环语句 while语句(“当”型循环) 形式: while (boolean表达式) 语句 执行过程: 先判断表达式的值。若=true.则执行其后 面的语句,然后再次判断条件并反复执 行,直到条件不成立为止范例:
while 循环语句
语法格式
[init_statement] while( test_exp){ body_statement; [alter_statement;] }
特殊流程控制语句 continue语句用法举例2
public class PrimeNumber{ public static void main(String args[]){ int n = 0; outer: for(int i=101;i<200;i+=2){ //外层循环 for(int j=2; j<i;j++){ //内层循环 if(i%j==0) continue outer; //不能使用 "break" ,为什么? } System.out.print(" " + i); n++; if(n<6 ) continue; System.out.println(); //输出六个数据后换行 n = 0; } } }
应用举例
public class WhileLoop { public static void main(String args[]){ int result = 0; int i=1; while(i<=100) { result += i; i++; } System.out.println("result=" + result); } }
递归
问题:求给定整数的阶乘,如何实现?
1. 使用循环语句…… 2. 使用递归
public int methodl(int n){ if(n == 1) return 1; else return n*method1(n-1); }
范例0604
递归调用 Test.java
递归的基本思想和要素 递归的基本思想是“依次类推”。 递归方法解决问题的两个步骤:
几种循环的比较
1. 对于同一问题, 三种循环可相互替代。 2. for循环功能强于while, do…while.但若不是明显 地给出循环变量初终值(或修改条件),则应用 while 或do …while.以增强程序的结构化和可读 性。 3. 要防止无限循环––死循环。 4. 循环过程中,为了结束本次循环或跳出整个循环。 分别要用到下述的continue和break语句。
流程: 计算表达式1 求表达式源自文库值
=true =false
语句 计算表达式3
结束for语句
for 循环语句
语法格式
for (init_statement; test_exp; alter_statement){ body_statement }
应用举例
public class ForLoop { public static void main(String args[]){ int result = 0; for(int i=1; i<=100; i++) { result += i; } System.out.println("result=" + result); } }
循环语句分类
for 循环 while 循环 do/while 循环
for 循环语句 1. 形式 for(表达式1; 表达式2; 表达式3) 语句 2.执行过程 首先计算表达式1,接着执行表达式2,若表达式2 的值=ture,则执行语句,接着计算表达式3,再判断表 达式2的值.依此重复下去,直到表达式2的值=false。