기술나눔

[리코우] 하루에 한문제 - 70번 계단 오르기

2024-07-12

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

주제:

당신이 계단을 오르고 있다고 가정해보자. 건물 꼭대기에 도달하려면 n 단계가 필요합니다.

한 번에 1~2단계씩 오를 수 있습니다. 얼마나 많은 방법으로 건물 꼭대기까지 올라갈 수 있나요?

아이디어:

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

어제보다 오늘이 더 나아졌으면 좋겠어요!

계속하세요! !