关于C#:斐波那契系列

Fibonacci series

我正在尝试用斐波那契数列进行练习。
我必须使用递归函数来实现,即斐波那契素数的素数n的继承,并将其打印出来
在相同的功能。问题是我的函数也打印中间号。
例如,n = 6的结果应为:1 1 2 3 5 8
有解决方案吗?

谢谢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<iostream>
using namespace std;
int rec(int n)
{
    int a, b;
    if (n == 0 || n == 1)
    {
        return n;
    }
    else
    {
        a = rec(n - 1);
        b = rec(n - 2);
        cout << a + b << endl;
        return a + b;
    }

}
int main()
{
    int n = 6;
    rec(n);
    return 0;
}


我接受了static int的帮助。可以按照您想要的方式工作。

1
2
3
4
5
6
7
8
9
10
11
12
void rec(int n)
{
    static int a=0,b=1,sum;
    if(n>0)
    {
         sum = a+b;
         a=b;
         b= sum;
         cout<<sum<<"";
         rec(n-1);
    }
}

尽管您必须自己在main()中打印第一个斐波那契数。

1
2
cout<<"0";
rec(n);


您可以使用此:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<iostream>
using namespace std;
#define MAXN 100
int visited[MAXN];
int rec(int n)
{
    if(visited[n])
    {
        return visited[n];
    }
    int a, b;
    if (n == 0|| n==1)
    {
        return n;
    }
    else
    {
        a = rec(n - 1);
        b = rec(n - 2);
        cout <<"" <<a + b;
        return visited[n] = a + b;
    }

}
int main()
{
    int n = 6;
    cout<<"1";
    rec(n);
    cout<<endl;
    return 0;
}

此实现使用动态编程。因此,它减少了计算时间:)


尝试使用此递归函数。

1
2
int fib(int n)
   return n<=2 ? n : fib(n-1) + fib(n-2);

这是我所知道的最优雅的解决方案。


我很确定您已经找到了可行的解决方案,但是我有一个略有不同的方法,该方法不需要您使用数据结构:

/ *作者:埃里克·吉坦古(Eric Gitangu)
日期:2015年7月29日
该程序将fibion??acci序列显示为32位数字的范围
假设:所有值均为ve;因此unsigned int在这里工作
* /

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <math.h>
#define N pow(2.0,31.0)

using namespace std;

void fibionacci(unsigned int &fib, unsigned int &prevfib){
    unsigned int temp = prevfib;
    prevfib = fib;
    fib += temp;
}
void main(){
    int count = 0;
    unsigned int fib = 0u, prev = 1u;

    while(fib < N){
        if( fib ==0 ){
            fib = 0;
            cout<<""<< fib++ <<" \
"
;
            continue;
        }
        if( fib == 1 && count++ < 2 ){
            fib = 1;
            cout<< fib <<" \
"
;
            continue;
        }
        fibionacci(fib, prev);
        cout<< fib <<" \
"
;
    }
}


因为要在rec中进行打印,由于递归,其多次打印。无需在递归函数中打印。而是在main

中打印结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
using namespace std;
int rec(int n)
{
    int a, b;
    if (n == 0 || n == 1)
    {
        return n;
    }
    else
    {
        a = rec(n - 1);
        b = rec(n - 2);
        //cout << a + b << endl;
        return a + b;
    }
}

int main()
{
    int n = 6;

    for (int i = 1; i <= n; i++)
    {
        cout << rec(i) << endl;
    }

    system("pause");
    return 0;
}