函数与递归


一、函数
 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;
 

 
public class tao {
   
    
    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;
 
 
public class tao {
   
    
    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;

 
public class tao {
  
    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); // 递归调用
    }
}


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值