2016-07-06 4 views
1

이 코드를 사용하면 주어진 조건의 모든 fibonacci 시퀀스 값을 인쇄 할 수 있습니까? 지금은 마지막 용어 만 인쇄합니다.재귀 및 피보나치 시퀀스

#include <stdio.h> 

int fibonacci(int n){ 

    if (n==2) 
     return 1; 
    else 
     return fibonacci(n-1) + fibonacci(n-2); 

} 


int main() 
{ 

    int n; 
    int answer; 
    printf("Enter the number of terms you'd like in the sequence\n"); 
    scanf("%d",&n); 

    answer = fibonacci(n); 
    printf("The answer is %d\n", answer); 

} 
+1

'if (n == 2)'를'if (n == 1 || n == 0)'로 변경하십시오. –

+0

[C에서 반복적 인 피보나치 수 구현에 관한 SO에 관한 현재의 질문은 무엇입니까?] (http://stackoverflow.com/search?q=%5Bc%5D+fibonacci+recursion)가 당신에게 무엇을 밝 혔습니까? – Lundin

답변

5

귀하의 기본 문자는 틀린 것입니다. n==2 일 경우 fibonacci(1)fibonacci(0)으로 전화하십시오. 후자는 스택 공간이 부족할 때까지 아래로 계속됩니다.

당신은 동일한보다 적은 숫자 기본 케이스를 확인해야합니다

if (n<=2) 

편집 : 당신이 모든 값을 인쇄하려면

, 당신은 그에게 방법을 수행 할 수 없습니다 이 함수는 이중 재귀 때문에 현재 구조화되어 있습니다.

이전에 계산 한 번호를 추적하면 완료 할 수 있습니다. 그런 다음 숫자를 처음으로 인쇄 할 때만 숫자를 인쇄하고 재귀를 수행합니다. 그렇지 않으면 목록에서 찾아서 계속합니다.

int fibonacci(int n){ 
    static int seq[50] = {0}; 

    if (n > 50) { 
     printf("number too large\n"); 
     return 0; 
    } 
    if (seq[n-1] == 0) { 
     if (n<=2) { 
      seq[n-1] = 1; 
     } else { 
      seq[n-1] = fibonacci(n-1) + fibonacci(n-2); 
     } 
     printf("%d ", seq[n-1]); 
    } 
    return seq[n-1]; 
} 

출력 : 결과가 그 범위의 주위에 32 비트 INT 너무 크기 때문에, 상기 함수는, (50)의 제한이 있는지

Enter the number of terms you'd like in the sequence 
10 
1 1 2 3 5 8 13 21 34 55 The answer is 55 

참고.

+0

+1 또한이 질문은 "주어진 용어의 피보나치 시퀀스의 모든 값을 인쇄"하고 싶어합니다. 가능한 경우 답변을 개선하십시오. –

+0

'n'이 50을 치기 전에 오버플로가 시작될 때 프로그램이 n을 1000까지 허용/저장하는 이유는 명확하지 않습니다. – cdlane