Java_练习_递归

1、课本上的练习




public class TestDemo {
    
    
    /**
     * 递归  练习:输入一个非负整数,返回组成它的数字之和.
     * 例如,输入 1729,
     * 则应该返回1+7+2+9,
     * 它的和是19
     */
    private static int sum(int n){
    
    
        if(n<1) return 0;
        return n%10+sum(n/10);
    }
    public static void main(String[] args) {
    
    
        System.out.println(sum(1729));

    }






    /**
     * 递归  练习:求 1+2+...+10
     */
    public static int add(int n){
    
    
        if(n==1){
    
    
            return  1;
        }
        return n+add(n-1);

    }
    public static void main3(String[] args) {
    
    
        System.out.println(add(3));
    }

    /**
     * 递归  练习:按顺序打印一个数字的每一位 --------------看 png
     */
    public static void func(int n){
    
    

        if(n > 9){
    
    
            func(n/10);
        }
        System.out.print(n%10+"  ");
    }
    public static void main2(String[] args) {
    
    
        func(2136);
    }


    /**
     * 递归 引例:  阶乘
     * @param
     */
    public  static int fac(int n){
    
    
        if(n==1) return 1;
        return n*fac(n-1);
    }
    public static void main1(String[] args) {
    
    
        System.out.println(fac(5));
    }



}

2、老师讲解

import java.util.Scanner;
import java.lang.String ;
import java.util.Random ;
public class HomeWork_4{
    
    




    /**
     * 求斐波那契数列的第n项。
     * f3 = f2 + f1;//关键点
     */
    public static int fibonacci(int n){
    
    
        if(n <= 0){
    
    
            return -1;//标识当前 n 不合法
        }
        if(n==1 || n==2){
    
    
            return 1;
        }
        int f1 = 1;
        int f2 = 1;
        int f3 = 0;
        for(int i = 3;i <= n; i++){
    
    
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return  f3;

    }
    public static void main5(String[] args) {
    
    
        System.out.println(fibonacci(3));
        System.out.println(fibonacci(4));
    }


    /**
     *创建方法求两个数的最大值max2,随后再写一个求上个数的最大值的函数max3.
     * 要求: 在max3这个函数中,调用max2函数
     */
    public static int max2(int a,int b){
    
    
        return a>b ? a : b;
    }
    public  static  int max3(int a,int b,int c){
    
    

        return max2(max2(a,b),c);
    }
    public static void main4(String[] args) {
    
    
        System.out.print("请输入数据:");
        Scanner scan = new Scanner(System.in);
        int num1 = scan.nextInt();
        int num2 = scan.nextInt();
        int num3 = scan.nextInt();

        System.out.println("较大值:"+max3(num1,num2,num3));
    }



    /**
     * 求 N 的阶乘 。
     */
    public static void main3(String[] args) {
    
    
        System.out.print("请输入一个整数:");
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int result = 1;
        for(int i = 1;i<=n;i++){
    
    
            result *= i;
        }
        System.out.println(n+"的阶乘为:"+result);

    }



    /**
     * 调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
     * -----------------------------------------------------定义两个下标,i、j
     * -----------------------------------------------------i存储偶数,j存储奇数
     * -----------------------------------------------------然后交换i和j位置
     */
    public static void reSort(int[] arr){
    
    
        int i = 0;
        int j = arr.length - 1;
        while (i < j){
    
     //当 i,j没有相遇时  进入循环
            while(i<j && arr[j] % 2==0) {
    
     //i<j  :  i,j不能相遇
                j--;
            }
            while(i<j && arr[i] % 2!=0) {
    
     //i<j  :  i,j不能相遇
                i++;
            }
            //进行交换
            int tmp=arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }

    }
    public static void main2(String[] args) {
    
    
        int[] arr = {
    
    1,2,3,4,5,6,7};
        reSort(arr);
        for(int i = 0;i < arr.length;i++){
    
    
            System.out.print(arr[i]+"  ");

        }        System.out.println();
    }















    /**
     *有一组数据,只有一个数字是出现一次,其他是两次,请找出这个数字。------->利用运算符
     *------------------------------------------------------------------>两个相同的数字“异或”为 0
     *------------------------------------------------------------------>任何一个数字 “异或” 0 = 它本身
     */
    public static void main1(String [] args) {
    
    
        int[] arr = {
    
    1, 1, 2, 2, 3, 4, 4};
        int num = findNum(arr);
        System.out.println(num);
    }

    public static int findNum(int[] arr){
    
    
        int ret = 0;
        for(int i = 0;i < arr.length;i++){
    
    
            ret ^= arr[i];
            }

        return ret;
        }

    }





猜你喜欢

转载自blog.csdn.net/qq_45915957/article/details/107647419