函数的重载和递归

一.重载

函数的重载指的是同一个类中出现的同名函数

注:被重载的方法必须具有不同的参数列表,不能基于不同的返回值类型来重载函数

有时调用一个方法时,会有两个或更多的可能的匹配,但是编译器无法判断哪个是最精准的匹配,这种错误称为歧义调用

下面是关于歧义调用的代码:

class Test01{
    public static void main(String[] args){
        int a=3;
        int b=4;
        System.out.println(add(a,b));
    }
     public static double add(int a,double b){
        System.out.println("int+double");
         return a+b;
     }
     public static double add(double a,int b){
         System.out.println("double+int");
           return a+b;
    }
    public static double add(double a,double b){
        System.out.println("double+double");
        return a+b;
    }
    
    public static int add(int a,int b){
       System.out.println("int+int");
       return a+b;
   }
}

由于主函数不知道该调用哪个函数,所以报错。因为int 类型的数用double类型也可以输出,所以主函数不知道调用哪个

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

重载的好处就在于我们可以扩展函数的功能(函数重名,但是参数类型不一样,执行内容也可以不一样)--换言之就是我们可以将公共部分写在主函数,将特有的写在其他函数中,需要调用时我们只需要调用这个函数即可,这样就会大大减小主函数代码。

二.递归

递归其实就是函数调用函数本身,最具代表性的递归问题是汉诺塔。

递归其实就是分治法的一种实现思路。

分治法是一种算法思想,分治法主要解决的问题是将大问题,进行拆分,拆分成若干个小的问题进行求解,最终将每个小问题的解进行合并。其实,分治法就是一种暴力破解法(穷举),也是一种搜索最优答案的算法

下面就是一个关于递归的函数:

class Test02{
    public static void main(String[] args){
        show();
     }
    public static void show(){
        System.out.println("show....");
        show();
    }
}

递归与迭代(for循环)的区别就在于:递归是函数调用其本身;而迭代则是函数调用其他函数

递归就是函数在进栈,进栈的次数多了,势必会占内存,无法避免

递归的解决步骤:递归递归,先递后归。主要分为三步:前进段:指的就是讲问题从大化小;结束段:问题无法再继续化小,则处理当前的问题;返回段:将小问题处理完毕之后,向上返回(有些问题是不需要返回的)。

用递归解决问题时,首先要先判断出触底条件(也就是最小的条件),再从最小条件向上返回。

发布了21 篇原创文章 · 获赞 0 · 访问量 363

猜你喜欢

转载自blog.csdn.net/weixin_44318477/article/details/104292089
今日推荐