java 二进制文件 续写_递归;IO流【输入输出流】;字节流;字节输入流;字节输出流;文件续写;文件拷贝 (Java Day19)...

一,递归

概述:方法自己调用自己的现象叫做递归

​ 递:传递 传递数据

​ 归:回归【回到起点的意思】

​ 传递数据到原点。每传递一个数据完成回到原点传递下一个数据;传递动作是重复, 只不过数据发生了变化而已。功能是唯一的。

​ 把重复的动作封装成为一个方法,传递数据回归到原点的时候;再次调用方法传入新的数据就可以。这样的操作我们命名为递归。

​ 特点描述:数据传递过程中最后传递数据会得到一个固定值,不需要再调用方法了。

特点体现:

方法自己调用自己。

​肯定要有一个出口【要让递归停下来】

​肯定有数据传递

弊端:不停的调用方法压栈,需要占用空间,如果内存空间小,递归没有执行完,程序结束

好处:代码简单,逻辑容易理解

​ 所有的递归都可以被普通的逻辑取代,只不过设计起来比较难,容易错。

练习一

计算n这个数的1 ~ n的和【曾经求1~n的和使用的循环+计数思想】

分析:

​              n ------> 结果 方法【f(n)】 方法变形 最终变形

​              1 -----> 1 f(1) 1 1

​             2 ------> 1+2 f(2) f(1)+2 f(n-1)+n

​             3 ----------> 1+2+3 f(3) f(2)+3 f(n-1)+n

​             n -----------> 1+2+3+.....+n f(n) f(n-1)+n f(n-1)+n

n=1的时候返回1,其他的时候返回n加 n-1的累和

代码示例

public classDemo01 {public static voidmain(String[] args) {//method_For();//使用递归完成累和

int sum = getSum(100);

System.out.println(sum);//5050

int sum2 = getSum(1);

System.out.println(sum2);//1

}//定义一个求数累和的方法

public static int getSum(intn) {if (n == 1) {return 1;

}else{//getSum(n-1)就是上一个数的累和

return getSum(n-1)+n;

}

}private static voidmethod_For() {//定义一个计数器

int sum = 0;//使用计数思想【循环】完成1到100的累和

for (int i = 1; i <= 100; i++) {

sum+=i;

}

System.out.println(sum);

}

}

练习二

计算n的阶乘 例如:5!= 5 * 4 * 3 * 2 * 1

分析:

​              1 1

​              2 2=1*2 2的累乘是 1的累乘乘以 2

​              3 6=1*2*3 3的累乘是 2 的累乘 乘以3

每个数的阶乘是使用方法求出的,除了1的阶乘 其他数的阶乘都是上一个数的阶乘*这个数

​              n (n-1)的阶乘 * n

定义一个求数的阶乘的方法 getMul(int n )

​            n为1返回1,

​            其他数的返回 getMul(n-1)*n【上一个数的阶乘乘以数自己 上一个数的阶乘使用方法可以求出来】

代码示例

public classDemo02 {public static voidmain(String[] args) {//调用方法求5的阶乘

int mul = getMul(5);

System.out.println(mul);

}//求阶乘的方法

public static int getMul(intn) {if( n==1){return 1;

}else{return getMul(n-1)*n;

}

}

}

练习三

键盘录入一个文件夹路径,打印该文件夹中所有的文件的绝对路径

分析:

得到文件夹的file对象

文件夹里面的文件有的是文件有的是文件夹

如果是文件直接输出绝对路径,是文件夹就进一步获取这个文件夹的文件重复的判断里面的文件是不是文件是输出,不是再获取文件判断.....一直到没有文件夹为止

所以可以定义一个方法来获取文件夹文件并判断文件是不是文件,是输出路径,不是重新调用该方法

代码示例

import java.io.File;

import java.util.Sc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值