| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3647 人关注过本帖, 2 人收藏
标题:斐波那契数列 求高手解答。
只看楼主 加入收藏
莱昂肯尼迪
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-3
收藏(2)
 问题点数:0 回复次数:11 
斐波那契数列 求高手解答。
1.问题描述(功能要求):
Fibonacci数列的计算公式如下:
fib(1) = 1;
fib(2) = 1;
fib(n) = fib(n-1) + fib(n-2);
(1)简单变量“数据平移”方法计算Fibonacci数列的第n项(正整数n通过键盘输入):说明变量old1=1,old2=1,newItem;新的Fibonacci项newItem总是“距它最近”的前两项(old1与old2)的累加和。而后通过“old1=old2; old2=newItem;”进行所谓的“数据平移”。接着计算另一个新的Fibonacci项newItem,依次循环,直到求出数列的第n项时为止。
(2)使用数组求出Fibonacci数列的第n项(正整数n通过键盘输入)并显示在屏幕上:说明数组f用来存放Fibonacci数列的各项之值,且仅初始化前两个元素f[0]=1,f[1]=1,而后通过f[i]=f[i-2]+f[i-1];依次计算出f[2]到f[n-1](注意f[n-1]恰为所要求出的第n项)并将该值显示在屏幕上。
2.其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块
(4)完成系统总结报告以及系统使用说明书。



我大一,学的不好,斐波那契数列一些简单的基本算法我会,但是这些要求太蛋疼了。这是我们的课程设计题目,希望哪个高手能帮我解决一下!
搜索更多相关主题的帖子: 正整数 键盘 
2011-05-16 20:58
lianjiecuowu
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:152
专家分:107
注 册:2011-5-20
收藏
得分:0 
#include <iostream>
using namespace std;
int main()
{
    int f1=1;
    int f2=1;
    int i;
    int m;
    cout<<"please enter m:"<<endl;
    cin>>m;
    cout<<f1<<" "<<f2<<endl;
    for(i=2;i<m;i++)
    {
                    f2=f1+f2;
                    f1=f2-f1;
                    cout<<f2<<endl;
                    }
                    cout<<i<<endl;
                    system("pause");
   
    }
我也是大一的啊,嘿嘿

Sharp your mind!
2011-05-26 16:48
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <cstdio>
#include <ctime>

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

int main() {
    clock_t exec_time = clock();
    printf("%u\n", fib_recursive(40));
    printf("fib_resursive() execution time : %.3f\n", (exec_time = clock() - exec_time) / 1.0 / CLOCKS_PER_SEC);
    printf("%u\n", fib_iteration(40));
    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;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

迭代和递归两种方式,可以看出递归的效率非常差。

[ 本帖最后由 lz1091914999 于 2011-5-27 12:00 编辑 ]

My life is brilliant
2011-05-27 11:58
棋局
Rank: 1
等 级:新手上路
帖 子:6
专家分:6
注 册:2011-3-18
收藏
得分:0 
嗯,确实,不仅要能编程,而且编程要讲究高效率的实现,尤其是进行复杂运算时。
2011-05-29 12:44
莱昂肯尼迪
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-3
收藏
得分:0 
回复 3楼 lz1091914999
。。。
效率问题太高深了,还不是我该研究的。。
貌似你的回答没解决我的问题阿。。
2011-05-30 09:31
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
太简单了吧,用递归,传入n
2011-05-30 10:59
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
核心问题都帮你解决了,还需要其它的吗?

My life is brilliant
2011-05-30 12:59
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include<iostream>
using namespace std;
int f(int n,int dep)
{
    for(int i = 0;i<dep;i++)
        printf(" ");
    printf("f(%d)\n",n);
    if(n==1||n==2)
    return 1;
    else
    return f(n-1,dep+1)+f(n-2,dep+1);
}
void main()
{
    int i=1,n;
    cin>>n;
    printf("%d\n",f(n,0));
} 
看一下你的递归的深度

                                         
===========深入<----------------->浅出============
2011-05-31 09:34
莱昂肯尼迪
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-5-3
收藏
得分:0 
回复 7楼 lz1091914999
核心问题?
核心问题是那个什么文本菜单。。。斐波那契数列基本算法我会。。但是那个什么文本菜单的要求我很困惑。
2011-06-06 05:58
爱德华
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:183
专家分:536
注 册:2011-5-29
收藏
得分:0 

算法,数据结构,windows核心编程.
2011-06-06 15:44
快速回复:斐波那契数列 求高手解答。
数据加载中...
 
   



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

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