函数(方法)、递归
函数(方法)与递归妙用
一、函数
1、函数的作用:
封装代码逻辑,将某个业务功能的整体实现放到一起,以方便其他程序员调用,实现代码复用,减少代码冗余。
2、函数的使用:
①、函数声明四要素:修饰符 返回值 方法名 (参数列表){方法体}。 public 公共的、谁都可以调用;static 静态的,通过类名调用。
②、返回值:是八大基本数据类型(byte、short、int、long、float、double、char、boolean、String),还可以是void(void表示没有返回值)。
③、执行过程中,将实际参数的值复制一份给形式参数与执行,如果有返回值,函数执行完毕后将返回值赋值给接收变量。
3、注意事项:
①、如果返回值为void,则函数体内可以没有return。
②、如果返回值是其他类型,方法体内必须要有return,而且return后面要跟一个变量、表达式、或值,而且他们的类型要与函数声明的返回值一致,若不一致,要么可以自动提升数据类型,要么在函数体内进行强制转换。
③、如举例:
public static int max(short num1,short num2){
return num1 > num2 ? num1 : num2;
}
二、递归
1、什么是递归?
函数体内调用自身函数
2、递归在什么地方使用?
①、某些数学问题(猴子粉桃、阶乘)
②、IO流遍历文件夹以及子文件夹
③、循环显示某些菜单的时候
3、递归的使用?
①、边界条件(初识状态),最简单的一种状态,递归终止的条件。
②、递推公式,相邻两项之间的关系。
③、注意:当递归调用次数比较多的时候,占用内存和系统资源会非常大,所以在企业开发中能不用递归尽量不用递归!!
三、案例
1、猴子分桃,有一堆桃子,第一天,某只猴子偷吃了一半多一颗,第二天又有某只猴子偷吃了剩下的桃子中的一半多 一颗,……,等到第7天的时候,有只猴子发现只剩下一只桃子了,问这堆桃子最开始有多少颗?
类比递推公式:An=An-1+2, A1=1 1 3 5 7 9
package day09;
/**
* @fileName : tao.java
* @description : TODO
* @author : yangzhihong
* @date : 2021年12月23日-下午4:05:57
*/
public class tao {
/**
* @return : void
* @Description : TODO
* @author : yangzhihong
* @Date : 2021年12月23日下午4:05:57
*/
public static void main(String[] args) {
System.out.println(f(1));
}
public static int f(int n) {
if(n == 7) { // ① 最简单的状态
return 1;
}else { // ② 递推公式
return 2*(f(n+1)+1); // 函数体内调用自身函数
// n=6 = 2*(f(7)+1)
// n=5 = 2*[f(6)+1] = 2*[2*(f(5)+1)+1]
// n=4 = 2*[f(5)+1]
// n=3 = 2*[f(4)+1]
// n=2 = 2*[f(3)+1]
// n=1 = 2*[f(2)+1] = 2*[2*(f(3)+1)+1]
// 内存占用会非常多,尤其调用次数比较多的时候
// 在企业开发中,能不用递归尽量不用!!
}
}
}
2、循环显示菜单
package day09;
import java.util.Scanner;
/**
* @fileName : tao.java
* @description : TODO
* @author : yangzhihong
* @date : 2021年12月23日-下午4:05:57
*/
public class tao {
/**
* @return : void
* @Description : TODO
* @author : yangzhihong
* @Date : 2021年12月23日下午4:05:57
*/
public static void main(String[] args) {
menu();
}
public static void menu() {
Scanner scanner = new Scanner(System.in);
System.out.println("=========【打印图形系统】=======");
System.out.println("--- 1、打印直角三角形 printRt()");
System.out.println("--- 2、打印等腰三角形 printDY()");
System.out.println("--- 3、打印菱形 printLX");
System.out.println("--- 4 退出系统");
// 接收用户输入的选择,然后进行判断
int choise = scanner.nextInt();
switch (choise) {
case 1:System.out.println("直角三角形");break;
case 2:System.out.println("等腰三角形");break;
case 3:System.out.println("菱形");break;
case 4:System.exit(0);
default:break;
}
menu();// 递归调用,方法体内调用自身方法
}
}
3、递归求阶乘 a ! = ?
package day09;
import java.util.Scanner;
/**
* @fileName : tao.java
* @description : TODO
* @author : yangzhihong
* @date : 2021年12月23日-下午4:05:57
*/
public class tao {
/**
* @return : void
* @Description : TODO
* @author : yangzhihong
* @Date : 2021年12月23日下午4:05:57
*/
public static void main(String[] args) {
System.out.println(jc(7));
}
public static long jc(int n) {
if (n == 1) {
return 1;
}
return n * jc(n-1); // 递归调用
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律