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

一个递归的问题

独孤小梦 发布于 2008-08-29 14:36, 1070 次点击
先谢谢大家能看本人的帖,问题如下谢谢:
#include<iostream.h>
const int N=8;
long Fibo(int n);
void main()
{
    long f=Fibo(N);
    cout<<f<<endl;
}


long Fibo(int n)
{
    if(n==1)
        return 1L;
    else
        if(n==2)
            return 1L;
        else
            return Fibo(n-1)+Fibo(n-2);
}


const是啥意思啊?这个递归使用时是怎么算的?先求出Fibo(n-1)函数的值还是算出一个就执行加运算?这里回归时它是怎么回归的?我笔算一个函数,当n为3时返回1,但是我在这里就卡住了!要怎么回归啊?还有return 1L  L是啥意思?是LONG?还是?
谢谢大家,给我帮帮忙!谢谢!
5 回复
#2
fish_2008-08-29 15:10
看看C++大学教程吧!看了你就不会提这种问题了!~ - ~
#3
独孤小梦2008-08-29 15:15
C++大学教程?书?还是?
我没有这本书?能否说明点?谢谢了!
#4
codeplayer2008-08-29 22:25
const 说明N是常量;
先算F(n-1),再算F(n-2),然后加起来;
return 1L,加个L,指明1是long型
#5
xmnathan2008-08-30 10:41
const 就是定义常量
递归 比如你算得是Fibo数列的第8个元素,他就会先算7和6,要算7和6就要算6和5,5和4....最后追溯到2和1 即已知的值 然后反过来进行加运算先算第3个元素然后第4个...,最后加回到第8个元素得到结果

看C++ Primer吧 有中文第4版电子版的

递归
#include <iostream>
using namespace std;
int ff(int n)
{
    int f;
    if((n==1)|(n==2)) f=1;
    else f=ff(n-1)+ff(n-2);
    return f;
}
void main()
{
    int n;
    cout<<"输入数列输出个数"<<endl;
    cin>>n;
    if(n<1)
    {
        system("cls");
        cout<<"输入错误请重新输入"<<endl;
        main();
    }
    for(int i=1;i<=n;i++)
        cout<<ff(i)<<"  ";
}
不用递归更简单,循环
#include <iostream>
using namespace std;
void main()
{
    int n;
    cout<<"输入限定范围值";
    cin>>n;
    cout<<endl<<"数列输出:"<<endl;
    int a,b,c;
    a=1,b=1;
    cout<<a<<"  "<<b<<"  ";
    do
    {
        c=a+b;
        if(c<n)
                {
            cout<<c<<"  ";
                }
        a=b,b=c;
     }while(c<n);
}
#6
独孤小梦2008-08-31 12:55
非常感谢大家,我好好理解一下吧!我就想知道先算前面的还是一起?现在知道了!回归的话,我在好好算下!
1