| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 343 人关注过本帖, 1 人收藏
标题:Fibonacci数列,帮改下,谢!
只看楼主 加入收藏
zjl01223
Rank: 2
等 级:论坛游民
帖 子:42
专家分:90
注 册:2011-4-21
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:5 
Fibonacci数列,帮改下,谢!
有一分数序列
      2/1,3/2,5/3,8/5,13/8,21/13,……     求前N项之和。
下面两份代码请帮忙改一下。

(1)分子,分母做一序列:
#include<stdio.h>
void main()
{
    int i=1,n,t,x=1,y=2;
    double s,sum=0;
    printf("请输入n=:");
    scanf("%d",&n);
    for(;i<=n;i++)
    {
        s=y/x;
        sum+=s;
        t=y;
        y=y+x;
        x=t;
    }
        printf("前n项之和=:%f\n",sum);
}

(2)分子,分母各做一序列:

#include<stdio.h>
void main()
{
    int x1=2,x2=3,y1=1,y2=2,n,i=1;
    double s,sum=0;
    printf("请输入n=:");
    scanf("%d",&n);
    for(;i<=n;i++)
    {
        s=x1/y1;
        sum+=s;
        x1=x1+x2;
        x2=x2+x1;
        y1=y1+y2;
        y2=y2+y1;
     }
        printf("前N项之和=:%ld\n",sum);
}







[ 本帖最后由 zjl01223 于 2011-5-24 14:45 编辑 ]
搜索更多相关主题的帖子: include double void 
2011-05-24 13:12
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:4 
递归会比较容易理解点!
程序代码:
#include"stdio.h"
double fibonacci(int n);
int main()
{
    double sum,num,deno;
    int n,i=0;
    printf("Input n;\n");
    scanf("%d",&n);
    while(n)
    {
        num=fibonacci(i+1);
        deno=fibonacci(i);
        sum+=num/deno;
        i++,n--;
    }
    printf("%e",sum);
    getch();
    return 0;
}

double fibonacci(int n)
{
    if(0==n)
        return  1;
    else if(1==n)
        return 2;
    else
        return fibonacci(n-1)+fibonacci(n-2);
        }

图片附件: 游客没有浏览图片的权限,请 登录注册

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-24 15:23
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:6 
程序代码:
#include<stdio.h>
void main()
{
    double i=1,n,t,x=1,y=2;
    double s,sum=0;
    printf("请输入n=:");
    scanf("%lf",&n);
    for(;i<=n;i++)
    {
        s=y/x;
        sum+=s;
        t=y;
        y=y+x;
        x=t;
    }
        printf("前n项之和=:%lf\n",sum);
}
数据类型  1/2如果是实数型为0.5 如果是整形为0

                                         
===========深入<----------------->浅出============
2011-05-24 17:04
lixuehu2012
Rank: 1
来 自:甘肃
等 级:新手上路
帖 子:3
专家分:1
注 册:2011-5-25
收藏
得分:0 
楼上很经典啊!!
2011-05-25 18:32
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <time.h>

unsigned int fib_recursive(int);
unsigned int fib_iteration(int);

int main(void) {
    clock_t exec_time = clock();
    printf("%u\n", fib_recursive(37));
    printf("fib_resursive() execution time : %.3f\n", (exec_time = clock() - exec_time) / 1.0 / CLOCKS_PER_SEC);
    printf("%u\n", fib_iteration(37));
    printf("fib_iteration() execution time : %.3f\n", (clock() - exec_time) / 1.0 / CLOCKS_PER_SEC);
    return 0;
}

unsigned int fib_recursive(int n) {
    if(n == 1 || n == 2)
        return 1;
    return fib_recursive(n - 1) + fib_recursive(n - 2);
}

unsigned int fib_iteration(int n) {
    unsigned int start1 = 1, start2 = 1, fib = start2;
    while(n-- > 2) {
        fib = start1 + start2;
        start1 = start2;
        start2 = fib;
    }
    return fib;
}
运行结果:
图片附件: 游客没有浏览图片的权限,请 登录注册

明显递归效率太低,要是求40递归要用2.5秒左右,而迭代我加到1000都接近0秒。

My life is brilliant
2011-05-25 19:19
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:0 
不得不承认,递归确实效率低!~

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-05-25 20:01
快速回复:Fibonacci数列,帮改下,谢!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019991 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved