Fibonacci数列C语言算法问题

mcmay 2013-03-28 05:56:38
请各问各位前辈,用C语言编一个程序计算出斐波那契数列的第N位数,如果不用递归算法而是用循环的话,应该如何实现呢(最好也不用数组)?我想了一个下午都没有任何进展,请各位帮忙看看。感激不尽!
下面我做了个函数调用的测试,但关键部位还是想不出来。

#include <stdio.h>

unsigned long test_fibonacci(int n);


int main(void)
{
int n;

printf("Enter a positive integer (q to quit): ");
while(scanf("%d", &n) == 1)
{
printf("\nThe %dth number in the fibonacci numbers is %lu",
n, test_fibonacci(n));
printf("\nEnter a positive integer (q to quit): ");
}
puts("\nDone!");

return 0;
}

unsigned long test_fibonacci(int n)
{
int i, sum = 0;

if(n <= 2)
sum = 1;
else
for(i = 2; i <= n; i++)
{
}

return sum;
}
...全文
596 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_21563739 2014-11-29
  • 打赏
  • 举报
回复
C++实现的Fibonacci数列的类 class Fib { //Fibonacci数列类 private: int f, g; //f = fib(k - 1), g = fib(k)。均为int型,很快就会数值溢出 public: Fib ( int n ) //初始化为不小于n的最小Fibonacci项 { f = 1; g = 0; while ( g < n ) next(); } //fib(-1), fib(0),O(log_phi(n))时间 int get() { return g; } //获取当前Fibonacci项,O(1)时间 int next() { g += f; f = g - f; return g; } //转至下一Fibonacci项,O(1)时间 int prev() { f = g - f; g -= f; return g; } //转至上一Fibonacci项,O(1)时间 }; 直接用函数实现: int Fibonacci( int n ) { //计算Fibonacci数列的第n项(迭代版) int f = 1, g = 0; //初始化:fib(1)、fib(0) while ( 0 < n-- ) { g += f; f = g - f; } //依据原始定义,通过n次加法和减法计算fib(n) return g; //返回 }
mcmay 2013-03-28
  • 打赏
  • 举报
回复
引用 4 楼 libralibra 的回复:
引用 楼主 mcmay 的回复:请各问各位前辈,用C语言编一个程序计算出斐波那契数列的第N位数,如果不用递归算法而是用循环的话,应该如何实现呢(最好也不用数组)?我想了一个下午都没有任何进展,请各位帮忙看看。感激不尽! 下面我做了个函数调用的测试,但关键部位还是想不出来。 C/C++ code?12345678910111213141516171819202……
libralibra兄,多谢了!这个类似迭代的方法确实奏效,刚刚在CU上见到也有几位是这么做的,果然是英雄所见略同啊!望今后再多赐教!
libralibra 2013-03-28
  • 打赏
  • 举报
回复
那个定义target多余了
libralibra 2013-03-28
  • 打赏
  • 举报
回复
引用 楼主 mcmay 的回复:
请各问各位前辈,用C语言编一个程序计算出斐波那契数列的第N位数,如果不用递归算法而是用循环的话,应该如何实现呢(最好也不用数组)?我想了一个下午都没有任何进展,请各位帮忙看看。感激不尽! 下面我做了个函数调用的测试,但关键部位还是想不出来。 C/C++ code?123456789101112131415161718192021222324252627282……
设定2个变量a,b表示前2项,用循环不断的更新a和b就行了
#include <stdio.h>

unsigned long test_fibonacci(int n);


int main(void)
{
    int n;

    printf("Enter a positive integer (q to quit): ");
    while(scanf("%d", &n) == 1)
    {
        printf("\nThe %dth number in the fibonacci numbers is %lu",
               n, test_fibonacci(n));
        printf("\nEnter a positive integer (q to quit): ");
    }
    puts("\nDone!");

    return 0;
}

unsigned long test_fibonacci(int n)
{
    int a,b;
    a = b = 1;
    unsigned long t = 0;
    int target;

    if (n<=2) {
        return (unsigned long)a;
    } else {
        for (int ind=2;ind<n;ind++) {
            t = a+b;
            a = b;
            b = t;
        }
        return t;
    }
}
mcmay 2013-03-28
  • 打赏
  • 举报
回复
引用 1 楼 lavendermaple 的回复:
C/C++ code ? 1234567891011121314151617181920212223 #include<stdio.h> int main() { int Fibonacci(int x); int m,n; scanf("%d",&m); for(int i=1;i<=m;i++) { scanf("%d",&n); prin……
谢谢你,lavendermaple。用递归可以解决这个问题,不过我更想知道是否可以用递归以外的算法实现,最好也不用数组,不知是否有路子可走? 请各位继续不吝赐教!感谢!
paidream 2013-03-28
  • 打赏
  • 举报
回复
这个是我自己写的
paidream 2013-03-28
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
int Fibonacci(int x);
int m,n;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
	scanf("%d",&n);
	printf("%d ",Fibonacci(n));
}
return 0;

}
int Fibonacci(int x)
{
if(x==1||x==2)
	x=1;
else
	x=Fibonacci(x-1)+Fibonacci(x-2);
return x;

}

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧