注册 登录
编程论坛 C++教室

新手,只是简单的练习公式,然后运行不了呀,请指点

熊小绿 发布于 2015-09-02 17:51, 1139 次点击
#include<iostream.h>
void main()
{
    long F(int n);
        long f;
        if(n==1)
            f=1;
        else
            f=F(n-1)+F(n-2);
        return f;
}


18 回复
#2
熊小绿2015-09-02 18:14
怎么没人哟
#3
hjx11202015-09-02 18:20
递归不是这么玩的
#4
熊小绿2015-09-02 18:35
回复 3楼 hjx1120
哎,今天开的新课程嘛,就想试试,对这些东西挺有兴趣的,可以帮改改吗?
#5
hjx11202015-09-02 19:13
回复 4楼 熊小绿
#include <iostream>
long F(long n);
int main(){
    long number = 10,s = 0;
    s = F(number);
    std::cout << "第"<< number << "个斐波那契数是" << s << "\n";
    return 0;
}

long F(long n){
    if(n == 1 || n ==2 )
        return 1;   
    else
        return F(n-1)+F(n-2);
}
#6
夏如风2015-09-03 22:38
#include <iostream>
long F(int n);
int main(){
    int number; long s;
    cout<<"请输入一个正整数";
    cin>>number;
    s = F(number);
    cout << "第"<< number << "个斐波那契数是" << s << "\n";
    return 0;
}

long F(int n){
    if(n == 1 || n==2 )
        return 1;   
    else
        return F(n-1)+F(n-2);
}
#7
hjx11202015-09-03 23:29
回复 6楼 夏如风
您的代码可以编译嘛?
#8
夏如风2015-09-04 17:34
回复 7楼 hjx1120
忘记改你这代码了
 cout << "第"<< number << "个斐波那契数是" << s <<endl;
绝对不比你差
#9
林月儿2015-09-04 18:36
回复 8楼 夏如风
程序代码:

long F(int n){
    if(n>0)
        return n>2?F(n-1)+F(n-2):1;
}

年轻人代码写的还行口气不小,师姐也敢比。。。
#10
wmf20142015-09-04 18:46
你们的函数实现一个样,有什么比较的。如果是if(n<3)return 1; 或许还可讨论下哪个实现的效率高。
#11
林月儿2015-09-04 18:49
以下是引用wmf2014在2015-9-4 18:46:54的发言:

你们的函数实现一个样,有什么比较的。如果是if(n<3)return 1; 或许还可讨论下哪个实现的效率高。


是的呢,版主教训的是,请教新算法怎么写
#12
wmf20142015-09-04 18:51
回复 11楼 林月儿
不是针对你的。我回复的时候并没看到你的回复,你的问好运算符就很新颖了。
#13
林月儿2015-09-04 18:55
回复 12楼 wmf2014
我记得是三目运算符吧,管他呢上上学期学的呢,忘得差不多啦。。。
#14
hjx11202015-09-04 19:45
6楼的代码有一个致命的BUG
C++有一种命名空间的概念
掌柜的很好奇,6楼的代码是怎么编译通过的?

#15
林月儿2015-09-04 19:56
回复 14楼 hjx1120
同好奇
#16
TonyDeng2015-09-04 20:26
用上递归还讲效率
#17
wmf20142015-09-04 21:30
回复 16楼 TonyDeng
T版极端反感递归哦。
好像凡是斐波那契数列的都是递归的范例。的确递归时,函数的自我调用会让cpu反复入出栈做现场保护恢复工作,效率低下,受栈空间限制,但递归算法语句精炼,是考验编程人员将数学模型归纳为计算机算法最后组织成语句一个很好的手段。对编程一知半解的人肯定看不懂函数递归,对递归不熟练的肯定会写着写着就死循环了。
任何递归都可以变换为循环,斐波那契数用循环写的代码如下:
程序代码:
#include <iostream>
long F(long n);
int main(){
    long number = 10,s = 0;
    s = F(number);
    std::cout << ""<< number << "个斐波那契数是" << s << "\n";
    return 0;
}

long F(long n)
{
    int i,j,k,o;
    for(i=1,j=0,k=1;i<n;i++)
    {
        o=j+k;
        j=k;
        k=o;
    }
    return k;
}
#18
civilherui2015-09-05 08:45
函数是不能嵌套定义的。
#include<iostream>
using namespace std;
long fun(int n)
{
    if(n==1||n==2) return 1;
    else return fun(n-1)+fun(n-2);
}
int main()
{
    int n;
    cout<<"请输入n:";
    cin>>n;
    cout<<"fun("<<n<<")=";
    cout<<fun(n)<<endl;
}
#19
TonyDeng2015-09-05 21:18
回复 17楼 wmf2014
递归没有效率可言。适合的时候,可以用递归写出简洁的代码,但那不是效率。
1