函数的栈、重载、递归调用

1.函数的格式

函数格式:访问权限  函数类型  返回值类型    函数名(参数列表){

                                  函数体   

                                  return  返回值;

                   }

代码举例:

//判断素数
    public static boolean suShu(int number){
        boolean flag=true;
        //拆数字并反顺序组合
        for(int i=2;i<=number-1;i++){
            if(number%i==0){
                flag=false;
                break;
            }
        } 
        return flag;
    }
    //判断回文数
    public static int huiWenShu(int number){
        int mul=0;
        int temp=number;
        boolean flag=suShu(number);
        while(flag){
            mul=mul*10+number%10;
            number/=10;
            if(number==0){
                break;
            }
        }
        if(temp==mul){
            return temp;
        }else{
            return 0;
        }
    }

注意:有返回值的函数,参与运算、输出、赋值;无返回值的函数,仅仅调用,返回类型一定和返回值类型是可兼容的。

2.函数栈

2.1  栈的基本知识:先进后出,后出先进,一般把出栈叫做弹栈。下面用代码加图的方式更深的了解,如下:

2.2  所有的代码全写在主函数和代码切片封装调用的区别:

     2.2.1 所有的代码全写在主函数:代码的可读性差,进栈后占据不必要的空间,主函数冗余不方便查找错误

     2.2.2 代码切片封装调用:主函数进栈执行代码,执行到调用函数时,调用函数进栈(返回值或者打印)后,就弹栈了,栈中的代码少,运行速度快,这也是代码优化的体现。

3.函数的重载

3.1 注意:与权限没有关系,与返回值类型没有关系,与参数名没有关系,只与参数的排列组合有关系(注意参数类型的向下兼容问题)

     常见错误:寻找当前函数的流程  1.看是否有明确的参数定义  int+int  查看是否有(int,int)    2.看是否有可兼容的参数定义  int+int  查看是否有(double,double)3. 如果可兼容的参数定义有多个   int+int,查看的有(int,double)或者(double,int)此时报错,引用不明确。

3.2 代码举例:

class D1{
    public static void main(String []args){
      int a=3,b=4;
      double c=3.2,d=4.3;
      System.out.println(add(a,b));//add(int a,int b)
      System.out.println(add(a,c));//add(int a,double c)
      System.out.println(add(d,b));//add(double d,int b)
      System.out.println(add(c,d));//add(double c,double d)
    }
    public static int add(int a,int b){
        return a+b;
    }
    public static double add(int a,double c){
        return a+c;
    }
    public static double add(double d,int b){
        return d+b;
    }
    public static double add(double c,double d){
        return d+c;
    }
}
/*
以上的add就是函数重载
7
6.2
8.3
7.5
*/

4.函数的递归调用

4.1 递归的含义:分治法的一种实现方式,分治法是一种算法思想,分治法主要解决的问题是将大问题进行拆分,拆分成若干个小问题进行求解,最终将每个小问题的解进行合并。  分治法是一种暴力破解法(穷举),也是一种搜索最佳答案的算法

4.2 汉诺塔问题

4.2.1 图解

4.2.2 代码

class D1{
    public static void main(String[] args){
        //盘子的个数 出发 中间 目的
        hanno(3,"X","Y","Z");
    }                                     
    public static void hanno(int n,String begin,String mid,String end){
        if(n==1){
            System.out.println(begin+" -> "+end);
        }else{
            hanno(n-1,begin,end,mid);
            System.out.println(begin+" -> "+end);
            hanno(n-1,mid,begin,end);
        }
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值