• JavaSE - 方法


    目录

    1.1 方法的语法格式

    1.2 方法的调用 

    1.3 方法的重载

    1.4 递归

    练习一:用递归实现打印1-3的数字

    练习二:求n的阶乘

    练习三(1):按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

    练习三(2):求一个数字的每一位加起来的和(例如 1234 的和为1+2+3+4=10)

     练习三(3):递归求 1 + 2 + 3 + ... + 10

    练习四:求斐波那契数列的第 N 项

    递归:

    循环:


    1.1 方法的语法格式

    public static 返回值类型 方法名(形式参数列表){

            方法体;

    }

    • 1. 方法名字:采用小驼峰命名
    • 2.  在java当中,没有方法声明一说;Java是全局搜索的。

    1.2 方法的调用 

    • 定义方法的时候,不会执行方法的代码,只有调用的时候才会执行。
    • 一个方法可以被多次调用。

    例如:用函数的方法实现 计算1-n的阶乘的和

    1. public class TestDemo {
    2. //求每个数的阶乘
    3. public static int fac(int i){
    4. int ret = 1;
    5. for (int j = 1; j <= i; j++) {
    6. ret *= j;
    7. }
    8. return ret;
    9. }
    10. //求阶乘和
    11. public static int sum(int n){
    12. int sum = 0;
    13. for (int i = 1; i <= n; i++) {
    14. sum += fac(i);
    15. }
    16. return sum;
    17. }
    18. public static void main(String[] args) {
    19. //用函数实现1-n的阶乘的和。
    20. Scanner scan = new Scanner(System.in);
    21. int n = scan.nextInt();
    22. System.out.println(sum(n));
    23. scan.close();
    24. }
    25. }

    1.3 方法的重载

    会有面试题:重载和重写有什么区别?

    方法的重载需要满足三个点:

    • 1. 方法名称必须一样
    • 2. 方法的参数必须不一样(个数,数据类型,不同数据类型的顺序  这三个中,满足一个不同就算参数不一样)
    • 3. 返回值不做要求,可以相同也可以不同

    1.4 递归

    一个方法在执行过程中调用自身, 就称为 "递归"。递归,有递有归。

    递归出现栈溢出错误:去检查递归条件,要么给错了,要么没有。

    要找到递归的终止条件递归公式

    函数void类型声明代表“无返回值”,但不是“无返回”。所以用return; 返回是可以的。
    当然,若函数是执行完自动返回,就不需要用return; 了。
    有时候我们需要在函数内部强行终止函数继续运行下面的语句,比如说当我们使用一些分支判断的时候,经常需要在特定的情况下返回,终止继续往下运行,此时就需要return了,格式是: return;  
    这种写法就是有返回但没返回值,符合void。
    

    通过练习理解递归

    练习一:用递归实现打印1-3的数字

    1. public class TestDemo {
    2. /* 我给的数是3,用递归打印1-3的数字
    3. 递归的终止条件:a = 1
    4. 递归公式:每次减1,直到为1,然后就可以归了。
    5. */
    6. public static void print(int n){
    7. if(n == 1){
    8. System.out.println(n);
    9. return;
    10. }
    11. print(n-1);
    12. System.out.println(n);
    13. }
    14. public static void main(String[] args) {
    15. print(3);
    16. }
    17. }

    1. 每次递的时候,这个方法(print)只执行了一部分,就去执行另一部分了。

    2. 归的时候,才会将当前方法的剩余部分执行完毕。

    3. 递的次数和归的次数是一样的。

    练习二:求n的阶乘

    1. public class TestDemo {
    2. /*求n的阶乘
    3. * 终止条件:n = 1
    4. * 递归公式: n! = n*(n-1)!*/
    5. public static int print2(int n){
    6. if(n == 1){
    7. return 1;
    8. }else{
    9. return n * print2(n-1);
    10. }
    11. }
    12. public static void main(String[] args) {
    13. System.out.println( print2(5));
    14. }
    15. }

    练习三(1):按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)

    学解决问题的思路!!!

    1. public class TestDemo {
    2. /*按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    3. *首先,要得到每一位数字,%10后 /10
    4. * 终止条件:n会一直变小,当n等于0时
    5. *递归公式:n/10 ,得到每一位是 n%10*/
    6. public static void print3(int n){
    7. if(n == 0){
    8. return;
    9. }
    10. print3(n/10);
    11. System.out.print(n%10+" ");
    12. }
    13. public static void main(String[] args) {
    14. print3(1234);
    15. }
    16. }

    练习三(2):求一个数字的每一位加起来的和(例如 1234 的和为1+2+3+4=10)

    1. public class TestDemo {
    2. /*需要将每位数字加起来
    3. * 求1234的和 = 4+123的和 */
    4. public static int print4(int n){
    5. if(n == 0){
    6. return 0;
    7. }
    8. return print4(n/10) + n%10;
    9. }
    10. public static void main(String[] args) {
    11. System.out.println(print4(1234));
    12. }
    13. }

     练习三(3):递归求 1 + 2 + 3 + ... + 10

    1. public class TestDemo {
    2. //递归求 1 + 2 + 3 + ... + 10
    3. /*输入10,则求1-10的和。
    4. * 终止条件:n = 1
    5. * 递归公式:1-10的和 = 10 + 1-9的和。每次-1的值返回与前面的值相加*/
    6. public static int sum(int n){
    7. if(n == 1){
    8. return 1;
    9. }else{
    10. return sum(n-1)+n;
    11. }
    12. }
    13. public static void main(String[] args) {
    14. System.out.println(sum(10));
    15. }
    16. }

    练习四:求斐波那契数列的第 N 项

    面试时遇到让求斐波那契数列的第 N 项用循环做,别用递归。递归效率低。

    递归:

    1. public class TestDemo {
    2. //求斐波那契数列的第 N 项
    3. /*递归:
    4. 终止条件:n = 1,和 n = 2时,返回1
    5. 递归公式:fib(n) = fib(n-1)+fib(n-2)
    6. */
    7. public static int fib(int n){
    8. if(n<=2){
    9. return 1;
    10. }else{
    11. return fib(n-1)+fib(n-2);
    12. }
    13. }
    14. public static void main(String[] args) {
    15. System.out.println(fib(10));
    16. }
    17. }

    循环:

    1. public class TestDemo {
    2. //求斐波那契数列的第 N 项
    3. /*非递归
    4. * 需要a,b,c三个变量,c = a+b
    5. * 变量还需进行交换*/
    6. public static void main(String[] args) {
    7. int n = 10;
    8. int a = 1;
    9. int b = 1;
    10. int c = 1;
    11. while(n>2){
    12. c = a + b;
    13. a = b;
    14. b = c;
    15. n--;
    16. }
    17. System.out.println(c);
    18. }
    19. }
  • 相关阅读:
    LeetCode 算法:全排列 c++
    【云原生Kubernetes系列】KubeSphere容器调度平台
    【小余送书第三期】CTF/AWD竞赛标准参考书+实战指南:《AWD特训营》,参与活动,领书咯!
    【无标题】
    LVS+Keepalived+NFS集群部署
    1472:【例题2】The XOR Largest Pair——Trie树
    STM32--PWR电源控制
    IT新人如何在职场弯道超车?强推荐考取当下最有价值的云计算认证证书!
    [Power Query] 删除重复项
    Java中转换流&打印流&Reader类的方法&OutputStream和Writer方法
  • 原文地址:https://blog.csdn.net/m0_61731585/article/details/126074713