JAVA prácticas de búsqueda de empleo-recursión y bucle

La recursión es una idea y un algoritmo muy importantes. Recuerdo las competencias de programación muy populares en las universidades, como la Copa Blue Bridge, ACM, la competencia de la escalera de programación, etc. Muchos problemas pueden resolverse utilizando la recursividad. Se necesitan tres oraciones para comprender la recursividad:

(1) La recursión es un bucle

(2) La recursión es un método que constantemente se llama a sí mismo

(3) La recursión necesita una salida, debe haber una instrucción if para detener la llamada al método

Aquí hay tres ejemplos simples para ilustrar la recursividad

Los tres ejemplos son salida 0-9; suma la matriz; determina si las cadenas son iguales.

Los tres ejemplos se pueden resolver utilizando for loop, por lo que la recursión y el loop se pueden convertir entre sí. Analicemos las ideas a continuación:

Para la primera pregunta: salida 0-9

先写f1(0,9);这就代表了会输出0-9折10个数;
在f1(int begin, int end)中,我们只打印begin这个数,后面的工作给别人做,这是在“踢皮球”;
当begin>end时,不能打印了,直接return,这是递归的出口

Para la segunda pregunta: calcule la suma de la matriz

先写f2(arr,0);表示从第0位开始计算数组中元素的和
在方法中计算arr[begin]+f2(arr,begin+1);表示我们只计算第0位的元素,后面的计算给别人做,这是“踢皮球”;
当begin等于数组中最后一位时,直接就返回这个位置的值,这是出口

Para la tercera pregunta: comparar cadenas para la igualdad 

先写f3(str1, str2);表示比较str1和str2是否相同;
方法体中先比较字符串长度是否一样,不一样直接false,我们只比较第一个字母。后面的字母给别人比,这是“踢皮球”;
当比较到最后,字符串为空时那么字符串相同,这是出口
package com.note;

public class 递归和循环 {
    public static void main(String[] args) {
        //例1 从0输出到9
        f1(0,9);
        System.out.println("************************");
        //例2 对数组求和
        int[] arr = new int[]{1, 3, 5, 7, 8};
        int sum = f2(arr,0);
        System.out.println("sum:"+sum);
        System.out.println("************************");
        //例3 比较2个字符串是否相同
        String str1 = "abcd";
        String str2 = "abcd";
        boolean flag = f3(str1, str2);
        System.out.println("flag:"+flag);
        

    }

    private static boolean f3(String str1, String str2) {
        if (str1.length() != str2.length()) return false;
        if (str1.length() == 0) return true;
        if (str1.charAt(0) != str2.charAt(0)) return false;

        return f3(str1.substring(1), str2.substring(1));
    }

    private static int f2(int[] arr, int begin) {
        if (begin == arr.length-1) return arr[begin];
        return arr[begin]+f2(arr,begin+1);
    }

    private static void f1(int begin, int end) {
        if (begin > end) return;
        System.out.println(begin);
        f1(begin+1, end);
    }
}

Entonces, se necesitan tres pasos para hacer la recursividad

(1) Encuentra duplicados: la parte que hice + la parte "jugando la pelota" para otros 

(2) Encuentre el cambio: el cambio suele ser los parámetros del método recursivo

(3) Encuentre el límite: el límite es generalmente una salida recursiva

La recursión es solo un tema relativamente básico, y habrá temas más profundos que se seguirán actualizando en este artículo.

111 artículos originales publicados · Me gusta 60 · 70,000 + vistas

Supongo que te gusta

Origin blog.csdn.net/Haidaiya/article/details/105249383
Recomendado
Clasificación