2020-11-07

Programación recursiva-recursiva-dinámica

En primer lugar, entiendo que estos tres son una forma y un pensamiento. Incluir recursividad y dp puede contarse como recursividad. En forma de recursividad, el código es conciso, pero la eficiencia es baja (mejora, recursividad de memoria). dp, hay más códigos recursivos, pero la eficiencia es alta.
Veamos algunos ejemplos de preguntas que aprendí:

Sube las escaleras

Significado de la pregunta: Xiao Ming sube las escaleras, puede subir uno, dos o tres pisos a la vez y preguntar cuántos caminos hay para 100 escaleras.

  1. Análisis recursivo: cada piso se puede dividir en tres situaciones, subir 1, ir 2, ir 3. Por el contrario, cada capa se compone de tres tipos. Camine desde abajo, dos y tres. Entonces, recursivamente hacia abajo, hay tres casos para cada capa: n-1, n-2, n-3
  2. Análisis de recurrencia: cada capa se deriva de tres situaciones, luego se puede obtener la fórmula de recurrencia fn = fn-1 + fn-2 + fn-3;
  3. el código se muestra a continuación:
public class 上楼梯 {
    
    
	public static void main(String[] args) {
    
    
		int n=8 ;
		int t=fbs1(n);
		int a=fbs2(n);
		System.out.println(t);
		System.out.println(a);
	}
//递推
	private static int fbs2(int n) {
    
    
		if(n<0)	return 0;
		if(n==1||n==0)	return 1;
		if(n==2)	return 2;
		if(n==3)	return 4;
		int x1=1,x2=2,x3=4;
		for (int i = 4; i <= n; i++) {
    
    
			int t=x1;
			x1=x2;
			x2=x3;
			x3=x1+x2+t;
		}
		return x3;
	}
//递归
	private static int fbs1(int n) {
    
    
		int m=0;
		if(n==1||n==0) return 1;
		if(n==2) return 2;
		m+=fbs1(n-1);
		m+=fbs1(n-2);
		m+=fbs1(n-3);
		return m;
	}
}

Continuará

Supongo que te gusta

Origin blog.csdn.net/ba7bc/article/details/109553428
Recomendado
Clasificación