Compartir tecnología

[Likou] Una pregunta por día: Pregunta 70, Subir escaleras

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

tema:

Supongamos que estás subiendo escaleras. Se necesitan n pasos para llegar a la cima del edificio.

Puedes subir 1 o 2 escalones a la vez. ¿De cuántas maneras diferentes puedes subir a la cima de un edificio?

Idea:

Primero escribí una función para calcular la cantidad de personas que subieron al primer y segundo piso, y luego las organicé y las sumé, pero estaba fuera de rango. Luego cambié el rango, pero el resultado fue incorrecto.

No sé por qué,

Más tarde, cuando miré los resultados, me parecieron cada vez más familiares. ¿No es ésta la secuencia de Fibonacci?

Sucederá más tarde

Código de resultado:

  1. int climbStairs(int n) {
  2.   //int n,j;
  3.   int sum=0;
  4.   //scanf("%d",&n);
  5.   int f_1=1;
  6.   int f_2=2;
  7.   int f_n=0;
  8.   //int f_n_1=0;
  9.   if(n==0||n==1||n==2)
  10.   {
  11.       return n;
  12.   }
  13.   for(int i=1;i<=n-2;i++)
  14.   {
  15.       f_n=f_1+f_2;
  16.       //f_n_1=f_n+f_2;
  17.       f_1=f_2;
  18.       f_2=f_n;
  19.   }
  20.   return f_n;
  21.   // return 0;
  22.    
  23. }

¡Sigan con el buen trabajo! ! ! ! ! ! !

Mi cabeza está vacía.

Si hay una solución mejor, hágamelo saber, ¡gracias!

Agregue un método recursivo:

Pensamiento recursivo:

Lo mismo que la secuencia de Fibonacci, es decir, usando recursividad para escribir Fibonacci y finalmente generar

Ver código:

  1. int *func(int n,int* f_n,int f_1,int f_2)
  2. {    
  3.   --n;
  4.   if(n == -1)
  5.       return n;  
  6.   f_n[n] = f_1+f_2;
  7.   f_1 = f_2;
  8.   f_2 = f_n[n];
  9.   func(n,f_n,f_1,f_2);
  10.   return f_n;
  11. }
  12. int climbStairs(int n) {
  13.    
  14.   int f_n[n];
  15.   func(n,f_n,0,1);
  16.   return f_n[0];
  17. }

Espero estar mejor hoy que ayer!

¡Sigue adelante! !