【Java方法的递归调用 04】

一、方法的递归

方法自己调用自己

package com.company.Mothod;

/**
 * @Created by IntelliJ IDEA.
 * @Author tk
 * @Date 2019/8/9
 * @Time 15:26
 */
public class MethodTest06 {
    public static void main(String[] args){
        int resum1=sum(100);
        int resum2=sum(99);
        System.out.println("resum1== "+resum1+"\nresum2== "+resum2);
        int reValue=reSum(5);
        System.out.println("reValue== "+reValue);

        int resValuesum = resValuesum(6);
        System.out.println("resValuesum== "+resValuesum);

        int resValueSum = resValueSum(6);
        System.out.println("resValueSum== "+resValueSum);




    }
    //未使用递归实现1~n的和
    public static int sum(int n){
        int sum = 0;
        for(int i=1;i<=n;i++){
            sum += i;
        }
        return sum;
    }

    //使用递归实现1~n的和(递归调用:方法自己调用自己)
    public static int reSum(int n){
        if(n==1){
            return 1;
        }else{
            return n+reSum(n-1);
        }
    }

    //使用递归和未递归实现1~n的乘积
    public static int resValuesum(int n){
        int sum =1;
        for(int i=1;i<=n;i++){
            sum *= i;
        }
        return sum;
    }

    public static int resValueSum(int n){
        if(n==1){
            return 1;
        }else{
            return n*resValueSum(n-1);
        }
    }

}

课后练习题

package com.company.Mothod;

/**
 * @Created by IntelliJ IDEA.
 * @Author tk
 * @Date 2019/8/9
 * @Time 17:43
 */


/*
【程序1】
 打印出100-999中所有的"水仙花数",所谓"水仙花数"是指一
 个三位数,其各位数字立方和等于该数本身。例如:
 153是一个"水仙花数",因为153=1的三次方+5的三次方
 +3的三次方。
 1.程序分析:利用for循环控制100-999个数,每个数分解
 出个位,十位,百位。
*/
public class MethodTest07 {
    public static void main(String[] args){
        for(int i=100;i<1000;i++){
            if(num(i)){
                System.out.println(i+"是水仙花数");
            }
        }
    }

    public static boolean num(int n){
        int baiwei = n/100;
        int shiwei = n/10%10;
        int gewei = n%100%10;

        if(n == sxh(baiwei)+sxh(shiwei)+sxh(gewei)){
            return true;
        }else {
            return false;
        }
    }

    public static int sxh(int num){

        return num * num * num ;
    }
}
package com.company.Mothod;

/**
 * @Created by IntelliJ IDEA.
 * @Author tk
 * @Date 2019/8/13
 * @Time 10:51
 */

/*
程序2】
 某市的出租车计费标准为:3公里以内10元,3公里以后每
 加0.5公里加收1元;每等待2.5分钟加收1元;超过15公里
 的加收原价的50%为空驶费。
 要求编写程序,对于任意给定的里程数(单位:公里)和
 等待时间(单位:秒)计算出应付车费
*/
public class MethodTest08 {
    public static void main(String[] args){

        double licheng = 16.8;
        int waitTime = 200;

        double money = lichengchefei(waitTime,licheng);
        System.out.println("行驶里程:"+licheng+" 等待时间:"+waitTime+" 应付车费:"+money+" 元");

    }

    /*
    计算里程和等待时间所需要的车费
     */
    public static double lichengchefei(int waitTime, double lichen){
       double timeMoney =timeMoney(waitTime);

        double lichengMoney = 0.0;
        if(lichen<=3){
            lichengMoney = 10;
        }else{
            lichengMoney = (int) ((lichen-3)/0.5)*1 +10.0;
            if(lichen > 15){
                lichengMoney *= 1.5;
            }
        }

        double money = timeMoney+lichengMoney;
        return money;
    }

    //计算等待时间所需要的车费
    public static double timeMoney(int waitTime){
        double timeMoney = (waitTime/150)*1;
        return timeMoney;
    }
}
package com.company.Mothod;

/**
 * @Created by IntelliJ IDEA.
 * @Author tk
 * @Date 2019/8/14
 * @Time 10:11
 */

/*
【程序3】
 某电信公司的市内通话费计算标准如下:三分钟内0.2元,
 三分钟后每增加一分钟增加0.1元,不足一分钟的按一分
 钟计算。要求编写程序,给定一个通话时间(单位:秒)
 计算出应收费金额。
*/
public class MethodTest09 {

    public static void main(String[] args){
        int time = 2000;
        double huafei=huafei(time);

        System.out.println("收取费用:"+huafei+" 元");

    }
    public static double huafei(int m){
        double money =0.0;
        if(m<=180){
             money = 0.2;
        }else{
            money = (m-180)/60*0.1+0.2;
            if((m%60)!=1){
                money +=0.1;
            }
        }
        return money;
    }
}