Berbagi teknologi

[Likou] Satu pertanyaan per hari—Pertanyaan 70, Menaiki tangga

2024-07-12

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

tema:

Misalkan Anda sedang menaiki tangga. Dibutuhkan n langkah bagi Anda untuk mencapai puncak gedung.

Anda dapat menaiki 1 atau 2 anak tangga sekaligus. Berapa banyak cara berbeda yang dapat Anda lakukan untuk mencapai puncak sebuah gedung?

Ide:

Saya pertama kali menulis fungsi untuk menghitung jumlah orang yang naik ke lantai satu dan dua, lalu mengatur dan menjumlahkannya, tetapi ternyata di luar jangkauan. Kemudian saya mengubah rentangnya, tetapi hasilnya salah.,,,

Saya tidak tahu kenapa,

Belakangan, ketika saya melihat hasilnya, hasilnya terlihat semakin familiar. Bukankah ini deret Fibonacci?

Itu akan terjadi nanti

Kode hasil:

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

Pertahankan kerja bagus! ! ! ! ! ! !

Kepalaku kosong.

Jika ada solusi yang lebih baik, beri tahu saya, terima kasih!

Tambahkan metode rekursif:

Pemikiran rekursif:

Sama seperti deret Fibonacci, yaitu menggunakan rekursi untuk menulis Fibonacci, dan terakhir menghasilkan output

Lihat kode:

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

Saya harap saya lebih baik hari ini daripada kemarin!

Terus berlanjut! !