Monkey Climbing - Algoritmo recursivo (gráfico y texto detallados)

Tema Descripción

Un mono sube y salta en una colina con no más de 30 niveles. El mono puede saltar 1 nivel o 3 niveles con un solo paso hacia la montaña. Intenta averiguar cuántos métodos diferentes de escalada hay.

entrada de muestra

30

Salida de muestra

58425

Ideas para resolver problemas:

  1. Primero, encuentre la relación de recurrencia de f[k].
    Sea n = 30. El último escalón para subir la montaña es llegar al escalón 30. Hay f[30] diferentes formas de escalar. El primero se encuentra en el nivel 29 (salta 1 nivel para llegar), hay f[29] especies, el segundo está en el nivel 27 (salta 3 niveles para llegar), hay f[27] especies; entonces hay:
    f[30]=f[29]+f[27]
    y así sucesivamente, generalmente hay una relación de recurrencia:
    f[k]=f[k-1]+f[k-3] (k> 3)
  2. Determine las condiciones iniciales
    f[1]=1, es decir, 1=1
    f[2]=1, es decir, 2=1+1
    f[3]=2, es decir, 3=1+1+1, 3=3
  3. Implementación de la recursividad
    De acuerdo con la relación recursiva anterior y las condiciones iniciales, establezca un ciclo y aplique la recursividad para encontrar f[n].
    inserte la descripción de la imagen aquí

sección de código

#include<stdio.h>
long fun(int n)
{
    long key;
    if(n==1)
        key=1;
    else if(n==2)
        key=1;
    else if(n==3)
        key=2;
    else
        key=fun(n-1)+fun(n-3);
    return key;
}
int main()
{
    int m;
    long result;
    scanf("%d",&m);
    result=fun(m);
    printf("%ld",result);
    return 0;
}

La clave de esta pregunta es comprender la relación de recurrencia en la pregunta y resolverla de acuerdo con la relación de recurrencia y las condiciones iniciales.

Supongo que te gusta

Origin blog.csdn.net/weixin_45745641/article/details/106676243
Recomendado
Clasificación