函数(方法)、递归

函数(方法)与递归妙用

一、函数

 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); // 递归调用
	}
}
posted @   _杨先生  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示