笔记05 嵌套循环和递归调用

这篇笔记探讨了编程中的几种控制流程结构。首先介绍了switch作为多分支选择结构的使用,接着详细阐述了for循环的基本概念和应用。进一步讨论了嵌套循环,解释了如何在一个循环内部嵌套另一个循环来解决复杂问题。最后,文章深入解析了递归的概念,包括递归函数的工作原理及其在解决问题时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 switch 多分支选择结构
/*
	1、选择结构中的: 多分支选择结构语句  (switch语句)
		1) 格式:
			switch( 表达式 ) {
				case 值1 : 语句系列1; [ break; ]
				case 值2 : 语句系列2; [ break; ]
				case 值3 : 语句系列3; [ break; ]
				......
				case 值n : 语句系列n; [ break; ]
					
				[default : 语句系列m; ]
			}
			
		2) 规则:
			先计算表达式的值,再找到与表达式的值对应的case,做它后面所有语句系列,直到遇到 break; 语句时结束整个switch。
				当遇不到break; 时,则继续做下面的所有语句系列。
				
				若找不到与表达式的值对应的case,且 default 项存在时,则做它的语句系列m,之后结束整个switch语句。
				
		3) 注意事项:
				a) 表达式的值必须是 byte 或 short 或 char 或 int 型数据。				
				b) case 后的值1、值2、值3、...、值n均必须是 byte或short或char或int型常量。
					即: case后必须是常量,不可是变量。
				c) 当连续的多个case,其后的语句系列相同时,则前n-1个语句系列可以省略。(case穿透)
					
*/
public class  SwitchTest {

	public static void main( String[] args ) {
		//产生一个随机的字母
		char ch = 'o'; //(char)( 26 * Math.random() + 'a' );
		String str = "" ; //准备一个str变量来存放结果
		
		switch( ch ) {
			case 'a' :   
			case 'e' :  
			case 'i' :  
			case 'o' :   
			case 'u' :  str = "元音" ;  break;
			
			case 'y' :   
			case 'w' :  str = "半元音" ; break;
			
			default  : str = "辅音"  ;
		}
		
		System.out.println("\n产生的随机字母是: \'" + ch + "\'" + ",它属于: " + str ) ;
	}
}

2 for循环
/*
	1、for循环	
		for( 表达式1 ;  条件;  表达式3 ){
			循环体;	
		}														规则: 先执行表达式1,再去判断条件;条件成立执行循环;
    		然后,跳到表达式3处执行;之后再去判断条件;若条件仍然成立,
    		则继续执行循环体;依次下去,直到条件不成立而结束整个for循环。
		
		1) 在java语言中,for循环头部的三个表达式可以省略。
			结论:
				a) 若省略表达式1,则必须在for循环前声明它。
				b) 若省略表达式3,则往往将它置于循环体中。
				c) 若省略表达式2(条件),则往往需要在循环体中用if和break配合实现。
				
		2) 在java语言中,for循环头部的三个表达式可以扩展。
			结论:
				a) 表达式1扩展往往通过逗号来实现。
				b) 表达式3扩展也往往通过逗号来实现。
				c) 表达式2(条件)扩展往往通过逻辑运算符来实现。						   */	
public class ForTest {
 	public static void main(String[] args){
  	// 编写一个程序,输出九九乘法表;
  
 	 for(int i = 1 ; i <= 9 ; i++ ){  //控制行输出;
   
   		for(int j = 1;  j <= i; j++ ){  
   	 		if(i*j <10 ){
     				System.out.print( j + "*" + i + "= " + (i*j) + "  " );
    			}else{
   	 			System.out.print( j + "*" + i + "=" + (i*j) + "  " );
    			}
   		}
   		System.out.println();
	} 

}				
3 嵌套循环
/*
	1、嵌套
		为什么需要循环,为什么需要嵌套循环?
	
		将一个语句或多个语句需要反复执行时,则使用循环其效率会更高。
		
		中心放射法
		
	2、顺向去分析、理解这个嵌套循环(也就是嵌套循环的执行顺序)。
	
		5 5 5 5 5 
		5 5 5 5 5 
		5 5 5 5 5 
		5 5 5 5 5 
		5 5 5 5 5 
		
		5  
		5 5   
		5 5 5  
		5 5 5 5  
		5 5 5 5 5 
		
		    5  
		   5 5   
		  5 5 5  
		 5 5 5 5  
		5 5 5 5 5 
*/
public class  QuTest4 {
	public static void main( String[] args ) {
		char ch = 'a';
		
		for( int r = 1;  r <= 5;  r++ ){		
			for(int k = 1;  k <= 5 - r;  k++ ){ //总行数 - 第几行
				System.out.print( " " );
			}		
			for( int n = 1;  n <= r  ;  n++ ){			
				System.out.print( ch + " ");		
			}
			
			System.out.println(); //换行
		}
	
		//System.out.println("" + "AA");
	}
}
4 递归
/*
		1、什么是递归?
			定义: 在一个方法的方法体中出现了调用本身的现象。
			
			理解: 递是指传递下去,直到末尾的结果(递归的出口);
				归是指从末尾的结果处一层一层地返回,直到入口处而结束。
				
		2、案例: 求 1 + 2 + 3 + ... + 100 = ? 用递归实现
		
			分析: 
				业务是从1 至 100的累加,因此,假设:
				f( 100 ) == 1 + 2 + 3 + ... + (99) + 100 
				f(  99 ) == 1 + 2 + 3 + ... + (98) + 99
			
			所以,可推出>>>>>  f(100) == 100 + f( 99 );
			
			又有, f( 1 ) ==  1;
			
			若再次假设 n == 100 ,则以上式子变为:  f( n ) == n + f(n-1);
			
		思考: 
			求  5! ,用递归实现其结果。
			求  1! + 2! + 3! + ... + 10! = ? 用递归实现,不能出现循环语句。
			
			5! 阶乘( 连乘 1 * 2 * 3 * 4 * 5 )
		
*/

public  class   RecallMethodTest {
	public static void main( String[] args ) {
		
		int sum = 0;
		/*
		for( int i = 1; i <= 100; i++ ){
			sum += i;	
		}*/
		
		int n = 100;
		sum = f( n );
		System.out.println("1 + 2 + 3 + ... + " + n + " = " + sum );
	}
	
	//编写一个 f(n)方法, 用来求1 + 2 + 3 + ... + n 的值。
	public static  int   f( int n ){
		if( n == 1 ) {
			return 1;	//末端,它是递归出口。
		}else{
			return  n + f( n - 1 );  //在此出现了调用方法本身的现象。
		}
	}
	
}


 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值