zoukankan      html  css  js  c++  java
  • Java递归与基础复习

    Day01—基础复习,递归

    1、递归

    • 定义:指在当前方法内调用自己,即函数内部调用本函数

    • 分类:

      • 直接递归和间接递归
      • 直接递归成为方法自身调用自己
      • 间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
    • 注意事项
      • 递归一定要有条件限定,保证递归能够停止下来,否则会发生栈内存溢出
      • 在递归中虽然有条件限定,但递归次数不能太多,否则也会发生栈内存溢出。
      • 构造方法,禁止递归。
    • 递归使用的前提

      • 当调用方法的时候,方法的主体不变,每次调用方法的参数不同,可以使用递归

    image-20211016184422906

    • 递归练习

    • 1、计算1到n的和

      package com.one;
      
      public class Sum_n {
      	
      	public static void main(String[] args) {
      		// 使用递归计算1到100的和
      		int s= sum(100);
      		System.out.println(s);	
      	}
      	/*
      	 * 思路分析:
      	 * 计算1-N的和
      	 * 可以做 n+(n-1)+(n-2)+...+1
      	 * 注:使用递归必须明确:
      	 * 		1、递归的结束条件
      	 * 			本题获取到1结束
      	 * 		2、递归的目的
      	 * 			获取下一个被加的数字
      	 * */
      	public static int sum(int n){
      		//获取到1结果
      		if(n==1){
      			return 1;
      		}
      		//获取下一个被加的数字(n-1)
      		return n+sum(n-1);
      	}
      }
      
    • image-20211016191817020

    • 使用递归求阶乘

    package com.one;
    public class Jiecheng {
    	public static void main(String[] args) {
    		//递归n*(n-1)*(n-2)*..*1
    		int jiecheng=jc(5);
    		System.out.print(jiecheng);
    	}
    	//方法的主体不变,参数发生变化
    	public static int jc(int n){
    		//获取到1结果
    		if(n==1){
    			return 1;
    		}
    		//获取下一个被加的数字(n-1)
    		return n*jc(n-1);
    	}
    }
    
    • 使用递归遍历文件目录
    package com.one;
    
    import java.io.File;
    public class Dfile {
    	/*要求打印多级目录*/
    	public static void main(String[] args){
    		File file=new File("E:\note");
    		getAllFile(file);
    		
    	}
    	public static void getAllFile(File dir){
    		System.out.println(dir);
    		File[] files=dir.listFiles();
    		for (File f:files){
    			if(f.isDirectory()){
    				//判断是否是文件夹,如果是文件夹,则执行本身继续递归遍历
    				getAllFile(f);
    			}else{
    				//不是文件夹,则直接打印
    				System.out.println(f);
    			}
    		}
    	}
    }
    /*Console结果
     * E:
    ote
    E:
    oteAjax.md
    E:
    oteapi1.md
    E:
    oteAPI2.md
     * */
    

    image-20211016194737806

    image-20211016194943550

    • 搜索限定文件类型
    package com.one;
    
    import java.io.File;
    public class Dfile {
    	/*1、要求打印多级目录
    	 * 2、要求只打印.md文件*/
    	public static void main(String[] args){
    		File file=new File("E:\note");
    		getAllFile(file);
    		
    	}
    	public static void getAllFile(File dir){
    		File[] files=dir.listFiles();
    		for (File f:files){
    			if(f.isDirectory()){
    				//判断是否是文件夹,如果是文件夹,则执行本身继续递归遍历
    				getAllFile(f);
    			}else{
    				//不是文件夹,则直接打印
    				//使用File对象的toSting方法,在使用字符串的endWith("字符串")判断结尾字符,返回布尔值的方法;
    				String s= f.toString();
                    //把字符串全部转换为小写的
    				s=s.toLowerCase();
    				boolean bool=s.endsWith(".md");
    				if(bool){
    					System.out.println(f);
    				}
    				//简洁写法
                    //链式编程
    				if(f.getName().toString().endsWith(".md")){
    					System.out.println(f);
    				}
    			}
    		}
    	}
    }
    /*Console结果
    E:
    oteAjax.md
    E:
    oteapi1.md
    E:
    oteAPI2.md
     * */
    

    2、基础知识复习

    2.1 命令
    //查看版本
    javac -version
    java -version
    // 编译与执行
    javac Xxxx.java
    生成Xxxx.class
    执行命令
    java Xxxx
    
    2.2常量

    定义:在程序运行中,空间不能发生改变,变量不能被第二次赋值的空间叫做常量;只有一次赋值机会。

    规范:所有字母大写

    关键字:final

    package com.two;
    
    public class demo1 {
    	public static void main(String[] args) {
    		//声名常量
            final double PI =3.1415926;
    		System.out.print(PI);
    	}
    }
    
    2.3数据类型
    • 参考连接:https://www.runoob.com/java/java-basic-datatypes.html

    此处不在一一复习只做简单介绍:

    计算机存储单位

    1位=8字节

    1bit=8byte

    分类:

    整型 int,long类型
    浮点型 double float(注:float声名的数字需要在数字后添加f)
    布尔型 boolean bool;
    字符型 char a='k';占两个字节;只能使用单引号声名;
    short 默认值 0
    

    image-20211016203609474

    2.4数据类型转换
    布尔型(boolean)不参与类型转换
    
    • 自动

      可以自然而然发生,不需要人为干预。一般发生在从小转向大。将小数据赋值给大类型的变量。从小类型转成大类型。数据是不会发生丢失

      赋值:小的数据 给到大的类型的变量; 小的类型的数据给到大的类型的变量

      运算:运算过程中,选取大类型(将所有运算数的类型自动转为同一种类型,然后运算)

      必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
      
      package com.two;
      
      public class demo1 {
      
      	public static void main(String[] args) {
      		char c1='a';//定义一个char类型
              int i1 = c1;//char自动类型转换为int
              System.out.println("char自动类型转换为int后的值等于"+i1);
              char c2 = 'A';//定义一个char类型
              int i2 = c2+1;//char 类型和 int 类型计算
              System.out.println("char类型和int计算后的值等于"+i2);
      	}
      }
      /*c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97, A 对应值为 65,所以 i2=65+1=66。*/
      
    • 强制类型转换

      • 条件是转换的数据类型必须是兼容的。
      • 格式:(type)value type是要强制类型转换后的数据类型 实例:
      package com.two;
      public class Demo2 {
      	public static void main(String[] args) {
      		// 强制类型转换
      		int i1 = 123;
              byte b = (byte)i1;//强制类型转换为byte
              System.out.println("int强制类型转换为byte后的值等于"+b);
              double d= (double)i1;
              System.out.println("int强制类型转换为double后的值等于"+d);
      	}
      }
      /*int强制类型转换为byte后的值等于123*/
      
    • 隐含强制类型转换

      • 整数的默认类型是 int。
      • 小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。

    不辜负自己,加油;

  • 相关阅读:
    swift init继承问题
    CocoaPods 使用本地代码
    关于Xcode6 Segue 的疑问,没有解决!
    Cocos2d 学习资料推荐
    iOS8中 UILocalNotification 和 UIRemoteNotification 使用注意
    Cocos2d 初学基本知识
    iOS 和 Android 触摸事件传递
    iOS NSOperation的使用
    Android 相机对焦模式
    AES 推荐文章
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15415279.html
Copyright © 2011-2022 走看看