Обмен технологиями

[Ликоу] Один вопрос в день — Вопрос 70, Подъем по лестнице.

2024-07-12

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

тема:

Предположим, вы поднимаетесь по лестнице. Чтобы добраться до вершины здания, вам потребуется n шагов.

Вы можете подняться на 1 или 2 ступеньки за раз. Сколькими способами можно подняться на крышу здания?

Идея:

Сначала я написал функцию для расчета количества людей, поднимающихся на первый и второй этаж, а затем упорядочил и суммировал их, но это вышло за пределы диапазона. Позже я изменил диапазон, но результат был неверным.,,,

Я не знаю, почему,

Позже, когда я посмотрел на результаты, они выглядели все более и более знакомыми. Разве это не последовательность Фибоначчи?

Это произойдет позже

Код результата:

  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. }

Продолжайте хорошую работу! ! ! ! ! ! !

Моя голова пуста.

Если есть лучшее решение, пожалуйста, дайте мне знать, спасибо!

Добавьте рекурсивный метод:

Рекурсивное мышление:

То же, что последовательность Фибоначчи, то есть использование рекурсии для записи Фибоначчи и, наконец, вывода

См. код:

  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. }

Надеюсь, сегодня я лучше, чем вчера!

Продолжать идти! !