C中修饰的斐波纳契

时间:2016-11-24 18:17:55

标签: c dynamic-programming fibonacci

我需要生成一个经过修改的Fibonacci系列,它必须是完全动态的。这里给出f0和f1,即在产生序列后f0 = 1和f1 = 3。我应该在特定索引处打印结果值。

Ex:f0 = 1,f1 = 3,testcase(n)= 3(这可能不会改变特定值)

t1 = 4 t2 = 8 t3 = 11,依此类推。应使用以下函数为11个元素生成系列:f [i] = f [i-1] + f [i-2]

它可以表示为:

0=>1
1=>3
2=>4
3=>7
4=>11
5=>18
6=>29
7=>47
8=>76
9=>123
10=>199
11=>322

我应该在索引4,8和11(必须是我的程序的输出)上打印值,即11 76 322

输入格式:

f0,f1和n(其中n是指数的数量)

其中ti = [t1,t2,.... tn-1](指定R-Fibonacci系列的索引)。

输出格式: 根据给定的指数打印R-fibonacci系列的值。

示例输入:     1 3 3 4 8 11

示例输出:     11 76 322

我有为上述程序生成Fibonacci系列的代码,但我想在4,8,11个索引处显示该值。这是代码:

int fib(int n)
{
    int f[n+1];
    int i;
    f[0]=1;
    f[1]=3;
    for(i=2;i<=n;i++)
    {
       f[i]=f[i-1]+f[i-2];
    }
    return f[n];
}

int main()
{
   int n=11
   printf("%d ",fib(n));
   getchar();
   return 0;
}

3 个答案:

答案 0 :(得分:1)

如果我理解正确,这个问题与fibonacci关系不大,而且与C中的范围有关。您在函数fib中声明和定义数组,并在该函数中填充(并返回单个元素值)。你想要的是从调用者那里访问整个数组。

这样做的一种简单方法是在调用方法中声明数组,并将指针传递给fib函数:

#include <stdio.h>

int fib(int f[], int n)
{
    int i;
    f[0]=1;
    f[1]=3;
    for(i=2;i<=n;i++)
    {
       f[i]=f[i-1]+f[i-2];
    }
    return f[n];
}

int main()
{
   int n=11;
   int f[12];
   fib(f, n);
   printf("%d ", f[4]);
   printf("%d ", f[8]);
   printf("%d ", f[11]);
   getchar();
   return 0;
}

答案 1 :(得分:1)

喜欢这个?该数组在main中定义,并作为参数传递给函数。该函数填充数组,不返回任何内容,然后在main中,您可以打印所需的元素。

你需要一个循环来做到这一点,另一个动态数组保存你要打印的索引。

#include <stdio.h>

void fib(int n, int *f)
{
    int i;
    f[0] = 1;
    f[1] = 3;
    for(i = 2; i <= n; i++)
    {
       f[i] = f[i-1] + f[i-2];
    }
}

int main()
{
   int n = 11;
   int f[n+1];
   fib(n, f);
   printf("%d ", f[8]);
   printf("%d ", f[11]);
   printf("\n");
   getchar();
   return 0;
}

节目输出:

76 322

我会留下一些代码来编写,但假设您创建了所需索引值的动态数组,例如

int index[m];
index[0] = 4;
index[1] = 8;
index[2] = 11;

您可以打印系列术语,例如

printf("%d ", f[ index[i] ]);

答案 2 :(得分:0)

这是一个使用递归算法生成一组小于给定数N的斐波纳契数的代码:

#include<stdio.h>
int fibo(int n)
{
    if(n<2)
        return n;
    else
        return (fibo(n-1)+fibo(n-2));
}
void main()
{
    int n,i;
    printf("\n Enter number : ");
    scanf("%d",&n);
    printf("\n Fibonacci series is : ");
    for(i=0;i<n;i++)
        printf("\n %d",fibo(i));
}