2011-03-27 4 views
0

내가 알 수있는 한, 이것이 효과가있는 것처럼 보입니다.이 루프가 fibonacci 시퀀스의 처음 40 자리를 올바르게 표시하려면 어떻게해야합니까?

처음 두 요소는 1로 설정됩니다 (처음 0은 무시합니다). for 루프는 배열을 반복하며 피보나치 수는 두 개의 이전 수의 합계와 같기 때문에이를 추가 한 다음 표시하려고합니다.

출력은 모두 2 초이며 그 이유는 확실하지 않습니다.

참고 : 직접 대답을 찾지는 않지만 직접 알아낼 수있는 방법입니다. 당신은 ii-1 포함하고

//Fibonacci sequence 
#include <stdio.h> 

int main(void) { 
     int fib_numbers[40] = {1, 1}, i; 


     for(i = 1; i < 40; i++) { 
       fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1]; 
       printf("\t%d\n", fib_numbers[i]); 
      } 

     return 0; 
} 
+0

질문에 오타가 있습니까? 또는 버그 ...? – amit

답변

2

첫 번째 단계 후에 erray 요소는 0 (이 경우 초기화되지 않음, 0)입니다. fib [i + 1] = fib [i] + fib [i-1]은 어떨까요? printf ("% d \ n", fib [i + 1])? 그리고 물론 FIB의 41 대신

+0

이것은 사실입니다. 나는 +1 ... wtf와 같은 간단한 것을 놓쳤다. – Bowlslaw

2
fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1]; 

는 피보나치 공식은 세 개의 연속 인덱스를 포함한다.

BTW

이 :

int fib_numbers[40] = {1, 1}, i; 

는 IMO 끔찍한입니다. 2 줄로 나누십시오.

int fib_numbers[40] = {1, 1}; 
int i; 
+1

+1 @ 매트와 분할 후에 세미콜론을 잊지 마세요 :) – MByD

+0

ooops, 고마워요 .--) – Mat

2

(40)의 체크 아웃 코드

fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1]; 

이 라인의 왼쪽의 크기를 가지고 배열에 당신이 값을 저장하는 위치를 고려해야합니다.

+0

감사합니다. 아마 하나 씩 떨어져. @ _ @ – Bowlslaw

0

업데이트 코드는 다음과 같이

for(i = 2; i < 40; i++) { 
       fib_numbers[i] = fib_numbers[i-1] + fib_numbers[i - 2]; 
       printf("\t%d\n", fib_numbers[i]); 
      } 
0

내가 루프 당신은 자신을 재정 의하여 i 번째 요소를 할당하는

for(i = 1; i < 40; i++) { 
     fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1]; 
     printf("\t%d\n", fib_numbers[i]); 
    } 

잘못된 것 같다. 1.

는이

//Fibonacci sequence 
#include <stdio.h> 

int main(void) { 
    int fib_numbers[40] = {1, 1}; 

    for(int i = 2; i < 40; i++) { 
     fib_numbers[i] = fib_numbers[i - 1] + fib_numbers[i - 2]; 
     printf("\t%d\n", fib_numbers[i]); 
    } 

    return 0; 
} 

처럼해야 할 수 있음하지만 피보나치을 찾기 위해 재귀를 사용하는 것이 좋습니다 더 이상 내가 때 i 번째 요소의 값은 null입니다.

//Fibonacci sequence 
#include <stdio.h> 

int main void() { 

    int fib_numbers[40] = {1, 1}; 

    for(int i = 2 ; i < 40 ; i++) { 
     fib_numbers[i] = fibonacci(i); 
     printf("\t%d\n", fib_numbers[i]); 
    } 
    return 0; 
} 

int fibonacci(int a) { 
    if (a <= 1) return 1; 
    return fibonacci(a - 1) + fibonacci(a - 2); 
}