精华内容
下载资源
问答
  • C语言求斐波那契数列

    千次阅读 2019-10-21 13:16:00
    C语言求斐波那契数列 注释 //递归求斐波那契数列数列 //双重递归,很占用计算机资源 //测试数据为 40 时可以明显感到就算时稍有迟钝,每增加一,时间延长更明显 //递归求斐波那契数列数列 //双重递归,很占用计算机...

    C语言求斐波那契数列(优化方法)

    内容更新
    先看代码

    #include <stdio.h>
    int Fibonacci(int n);
    
    const int maxn = 1000;
    int meto[maxn];
    
    int main()
    {
    	printf("%d\n",Fibonacci(40));
    	return 0;
    }
    
    int Fibonacci(int n){
    	if(n<=1)
    		return n; //if input 0, the function will finish, this is to end
    	if(meto[n]!=0)
    		return meto[n];
    	return meto[n] = Fibonacci(n-1)+Fibonacci(n-2);
    }
    

    在斐波那契数列中,如果fib(n)的n是一定的,那么无论多少次调用都会得到同样的结果。因此如果一次计算之后,用数列将结果保存起来,便可优化之后的计算。

    ====================================================
    下面是原来的内容
    注释
    //递归求斐波那契数列数列
    //双重递归,很占用计算机资源
    //测试数据为 40 时可以明显感到就算时稍有迟钝,每增加一,时间延长更明显

    //递归求斐波那契数列数列
    //双重递归,很占用计算机资源
    //测试数据为 40 时可以明显感到就算时稍有迟钝,每增加一,时间延长更明显
    #include <stdio.h>
    
    int fun(int n);
    
    int main()
    {
    	int num;
    	printf("INPUT NUMBER:\n");
    	while(scanf("%d",&num)==1)
    	{
    		fun(num);
    		printf("Here are the results:\n%d\n",fun(num));
    		printf("\nINPUT NUMBER:\n");
    	}
    	return 0;
    }
    
    int fun(int n)
    {
    	int sum;
    	sum = n;
    
    	if(n>2)
    		sum= fun(n-2) + fun(n-1);
    	else if(n==2)
    		sum=1;
    	else if(n==1)
    		sum=1;
    
    	return sum;
    }
    

    ############################################
    新的方法

    #include <stdio.h>
    
    int Fbi(int i)
    {
    	if(i < 2)
    		return i==0? 0 : 1;
    	return Fbi(i-1) + Fbi(i-2); 
    }
    
    int main()
    {
    	int i;
    	for(i=1;i<40;++i)
    		printf("%d\n",Fbi(i));
    	return 0;
    }
    
    展开全文
  • 1. 递归求斐波那契数列 #include<stdio.h> #include<stdlib.h> int feb(int n) { if(n < 2) return 1; //特殊值单独列出来 else return (feb(n-1) + feb(n-2)); //主要的递归 } int main() { ...

    1. 递归求斐波那契数列

    #include<stdio.h>
    #include<stdlib.h>
    int feb(int n)
    {
     if(n < 2)
      return 1;    //特殊值单独列出来 
     else
      return (feb(n-1) + feb(n-2));    //主要的递归
    } 
    int main()
    {
     int x, i, n;
     long int f;
     n = 0;
     scanf("%d", &x);
     if(x < 0)
      printf("Error!");   //输入负数程序错误
     for(i = 1;i <= x; i++)
     { 
      printf("%-10ld", feb(i));   //打印每一项
      n++;
      if(n % 8 == 0)   //每8个换一行 
       printf("\n");
     }
     return 0;
    }
    

    2. 循环求斐波那契数列

    #include<stdio.h>
    int main()
    {
     int i, x, n;
     long int f, f1, f2;
     f1 = f2 = 1;     
     n = 2;
     scanf("%d", &x);
     if(x < 0)
      printf("Error!");
     printf("%-10ld%-10ld", f1,f2);    //特殊值单独列出来
     while(x > 2)
     {
      f = f1 + f2;   
      printf("%-10ld", f);
      f1 = f2;    //赋值,始终是所求数的前两个数的加和
      f2 = f;
      x--;
      n++;
      if(n % 8 == 0)   //每8个换一行 
       printf("\n");
     } 
     return 0;
    } 
    
    展开全文
  • c语言求斐波那契数列的第 n 位数字

    千次阅读 2018-12-31 15:23:22
    求斐波那契数列的第n位; 1.用递归的方法; ***值得注意的是:使用递归的方式虽然看起来很好理解但会有很大的运算量。 (当输入一个很大的数字时不建议使用此方法)运算量呈指数式增长。 #define _CRT_SECURE_NO...

    求斐波那契数列的第n位;

    1.用递归的方法;

    值得注意的是:使用递归的方式虽然看起来很好理解但会有很大的运算量。
    (当输入一个很大的数字时不建议使用此方法)运算量呈指数式增长。

    #define _CRT_SECURE_NO_WARNINGS 
    #include<stdio.h>
    #include<stdlib.h>
    
    int Fib(int n)
    {
    	if (n == 1 || n == 2)
    	{
    		return 1;
    	}
    	return Fib(n - 1) + Fib(n-2);
    }
    
    int main()
    {
    	//使用递归求第n个斐波那契数
    	int n = 0;
    	int ret = 0;
    	printf("输入求的第n个斐波那契数");
    	scanf("%d", &n);
    	ret = Fib(n);
    	printf("%d\n", ret);
    
    	system("pause");
    	return 0;
    }
    
    2.用函数的方法;

    以下代码只写了函数部分,这部分比较难理解,特别在循环部分里,要更新变量,而且要注意变量的类型使用 long long 型才不会溢出。另外在打印时的时候注意打印类型为 ll 型。例如:

    printf("%lld’,Fib_h(100));打印的是第100个数字的值,该数字为天文数字81930378546560963
    【优点】这种方法虽然比较难理解,但可以减少计算机的运算量。如果用递归的方法计算第100个数字的值,恐怕得好几个小时,而循环则不到1秒.

    int Fib_h(int n)
    {
    	if (n == 1 || n == 2)
    	{
    		return 1;
    	}
    	long long last1 = 1;//第i-1项
    	long long last2 = 1;//第i-2项
    	long long sum = 0;
    	for (int i = 3; i <= n; ++i)
    	{
    		sum = last1 + last2;
    		//更新last1,last2
    		last2 = last1;
    		last1 = sum;
    	}
    	return sum;
    }
    

    还有其它的的方法 比如:数组,队列,在后面的博客会继续更新。

    展开全文
  • C语言求斐波那契数列的第n项

    千次阅读 2020-02-29 05:43:13
    函数递归解法: #include<stdio.h> int cn(int n) { if(n==0||n==1) return 1; else return cn(n-1)+cn(n-2);} int main() { int n; long long c;... while(~scanf("%d",&...

    函数递归解法:

    #include<stdio.h>
    int cn(int n)
    {    
    	if(n==0||n==1)        
    		return 1;    
    	else        
    		return cn(n-1)+cn(n-2);}
    int main()
    {
        int n;
        long long c;
        while(~scanf("%d",&n))
        {
        	c=cn(n);
            printf("%lld\n",c);
        }
        return 0;
    }

    一般解法:

    #include <stdio.h>
    int main()
    {
        int i,n;
        int fib[100] = {1,1};
        scanf("%d",&n);
        for(i=2;i<=n;i++)
        {
            fib[i] = fib[i-1] + fib[i-2];
        }
        if(i>n)
            printf("%d\n",fib[i-1]);
        return 0;
    }
    
    展开全文
  • 写一个函数,fact(int n)...延伸:求斐波那契数列的前n项和 int fact(int n) { if(n==1||n==2) { return 1; } else { return fact(n-2)+fact(n-1); } } #include<stdio.h> int main(void) { int a;
  • C语言求斐波那契数列第n个数的值。

    千次阅读 2018-07-27 19:06:26
    在函数调用时用递归函数来实现此功能。 代码如下: #include&lt;stdio.h&gt; int fun(int n) {  if(1==n)  {  return 1;  }  if(0==n)  {  return 1;  }  return fun(n-1)+fun(n-2);...{...
  • 昨天被问到这个题,当时竟然没有想出来,课后立刻就想到了,有时候真的是一天三迷啊
  • C语言 计算斐波那契数列

    千次阅读 2020-09-09 19:31:13
    在学习C语言的道路上多次遇到了求斐波那契数列的问题,今天来总结一下我所知道的几种思想方法。 方法一:循环 使用斐波那契数列的推导式,通过循环将每一个值保存到数组fib中。需要说明的是,这里的fib[0]表示的是...
  • C语言斐波那契数列

    2018-10-24 16:42:40
    C语言斐波那契数列,1,1,2,3,5……编写程序第十项。 #include&amp;lt;stdio.h&amp;gt; int pheponatch(int N) { int a[N]; int i=1,j=2,k=N,q; a[i] = 1; a[j] = 1; printf(&...
  • 有另一种斐波那契数列:F(0)=7,F(1)=11,F(n)=F(n-1)+F(n-2) (n>=2) 用递归第n项。 输入格式: 输入一个正整数n(1<=n<=20) 输出格式: 输出斐波那契数列的第n项 函数接口定义: 在这里描述函数接口。例如...
  • C语言递归求斐波那契数列

    万次阅读 多人点赞 2019-04-17 21:09:44
    斐波那契数列指的是这样一个数列:1,1,2,3,5,8, 13, 21, 34, 55, 89...递归求斐波那契数列: #include<stdio.h> int fun(int n) { if(n==1||n==2)//通过数列的规律发现,前两项都为1,作为递归的终止条件 { ...
  • c语言斐波那契数列

    千次阅读 2018-10-22 19:47:56
    主要实现的功能是对前20个斐波那契数列分别出每一项的值 用一个int 数组去保存数值,先赋值a[0] = 1,a[1]=1. 之后就会发现每一项都是前一项及前两项之和 #include<stdio.h> void main(){ int a [20] =...
  • C语言打印斐波那契数列

    千次阅读 2016-03-16 16:23:24
    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个... //求斐波那契数列 long i; long m[21];//这里不要写为m[20],m[20]的意思是0
  • # 斐波那契数列前n项和问题 如果数列的前前两项不为1,而是a1和a2,那应该怎么设计这个函数呢? ``` #include"stdio.h" int fb(int a1,int a2,int n); int main() { int a,b,n,s; scanf("%d%d%d",&a,...
  • 斐波那契数列的描述:斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列...【问题描述】求斐波那契数列的前40个数(不输出第0项),每行输出4个数。 ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 298
精华内容 119
关键字:

c语言求斐波那契数列

c语言 订阅