Fibonacci一个递归调用

时间:2015-03-10 21:27:34

标签: c

我希望转换基本的Fibonacci函数:

int find_fib(int fib_to) {

    if (fib_to == 0) {
        return 0;

    }
    else if (fib_to == 1) {
        return 1;

    }
    else {
        return (find_fib(fib_to - 1) + find_fib(fib_to - 2));       
    }   
}

进入一个只使用一次递归调用的程序。我搜索了许多网站,告诉我将(find_fib(fib_to - 1)+ find_fib(fib_to - 2))找到的值存储到某个数组中,然后使用该数组,但这样做需要2次递归调用。

有关如何解决问题的任何提示?

1 个答案:

答案 0 :(得分:1)

你的意思是什么?

#include <stdio.h>

int fibonacci(int number_iterations, int number_a, int number_b) 
{
    if(number_iterations <= 0) {
        printf("error: 'number_iterations' must be >= 1\n");
        return -1;
    }

    if(number_iterations == 1) {
        printf("%d ", number_a + number_b);
        return number_a + number_b;
    }

    printf("%d ", number_a + number_b);
    return fibonacci(number_iterations - 1, number_b, number_a + number_b);
}

int main()
{
    int a = 1; 
    int b = 1;
    int number_of_iterations = 0;

    printf("Enter a number >= 1: ");

    int err = scanf("%d", &number_of_iterations);
    int final_result = -1;

    if (err != EOF) {
        printf("fibonacci: %d %d ", a, b);
        final_result = fibonacci(number_of_iterations, a, b);
    }

    printf("Final fibonacci: %d\n", final_result);

    return 0;
}

会回复你:

Enter a number >= 1: 10
fibonacci: 1 1 2 3 5 8 13 21 34 55 89 144
Final fibonacci: 144