java递归原理

1.什么是递归?

递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.

使用递归有两个前提条件:

1.有一个趋近与终止的条件。

2.自己调用自己 。

如何实现递归?

最重要的方式是:实现递归,需要去推导出一个递推公式。

思考递归的方式:横向思考,根据递推公式来思考。

代码的执行:是纵向执行。

递归的分类:

递归分为两种,直接递归和间接递归。

直接递归称为方法自身调用自己。

间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

for循环实现99乘法表

public class test99 { 

    public static void main( String[] args ) { 

        for (int i=1;i<=9;i++){ 

            for (int j=1;j<=i;j++){ 

            System.out.print(j+" * "+i+ " = "+(i*j) +" ");

            }

        }

    }

}

递归实现99乘法表

public class diguidemo {

    public static void main( String[] args ) {

        digui(9);

    }

    private static void digui( int i ) {

        if (i==1){

            System.out.println("1*1=1");

        }else {

            digui(i-1);

            for (int j=1;j<=1;j++){

            System.out.print(j + "*" + i + "=" + j * i + " ");

            }

        }

    }

}
 

递归求和

public class diguiqiuhe {

    public static void main( String[] args ) {

        int num=5;

        int sum=getSum(num);

        System.out.println(sum);

    }

    private static int getSum( int num ) {

        if (num==1){

            return 1;

        }

        return num+getSum(num-1);

    }

}
 

例题:递归方式求n的阶乘   画图分析:

 实现代码 :

public class TestDemo {
    public static int fac(int n){
        if(n == 1) {
            return 1;
        }
        int tmp = n * fac(n - 1);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(fac(5));
 
    }
}

代码画图讲解:

例题:求n的和

画图分析:

 

第一种写法:
public class TestDemo {
    public static int sumAdd(int n){
        if(n == 1) {
            return 1;
        }
        int tmp = n + sumAdd(n - 1);
        return tmp;
    }
    public static void main(String[] args) {
        System.out.println(sumAdd(3));
 
    }
}
 
第二种写法:
public class TestDemo {
    public static int sumAdd(int n){
        if(n == 1) {
            return 1;
        }
       
        return n + sumAdd(n -1);
    }
    public static void main(String[] args) {
        System.out.println(sumAdd(3));
 
    }
}

例题:递归实现按照顺序打印每一位的数字 

画图分析:

实现代码:

public class TestDemo {
 
    public static void print(int n){
        if(n < 10){
            System.out.print(n+" ");
        }else{
            print(n/10);
            System.out.print(n%10+" ");
        }
    }
    public static void main(String[] args) {
        print(1234);
 
 
    }
}

例题:写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如:输入1729,则应该返回1+7+2+9

实现代码:

public class TestDemo {
 
 
    public static int sumEveryone(int n){
        if(n < 10){
           return n;
        }else{
            return n%10 + sumEveryone(n/10);
        }
    }
 
    public static void main(String[] args) {
        System.out.println(sumEveryone(7910));
 
    }
 
}

例题:求第n个斐波那契数是几 

画图分析:

第一种方法:递归
public class TestDemo {
    public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }else{
            return fib(n-2)+fib(n-1);
        }
    }
    public static void main(String[] args) {
        System.out.println(fib(5));
 
    }
 
 
 
第二种方法:叫做循环(迭代)实现
    public static int fib2(int 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 main(String[] args) {
        System.out.println(fib2(45));
 
    }

 

来源:

https://blog.csdn.net/weixin_28996271/article/details/114078034 

https://www.yisu.com/zixun/690802.html

posted @ 2022-03-17 14:16  程序员小明1024  阅读(372)  评论(0编辑  收藏  举报