标题:斐波那契数列求第n个值的数?
只看楼主
甲级黎庶
Rank: 2
等 级:论坛游民
帖 子:52
专家分:15
注 册:2017-10-4
结帖率:75%
已结贴  问题点数:20 回复次数:9 
斐波那契数列求第n个值的数?
斐波那契数列F0=0,F1=1,F2=1,F3=2......Fn=Fn-1+Fn-2;当输入第几行时,就输出第几行的数,如n=7时,就输出13,求教各位大佬,这个题怎么来写呢?
搜索更多相关主题的帖子: 斐波那契 数列 输入 输出 
2017-10-12 20:01
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
搜搜吧  太多太多的源代码  更有很多你看不懂的代码

DO IT YOURSELF !
2017-10-12 20:29
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
得分:5 
程序代码:
#include<stdio.h>
int func(int n)
{
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    return func(n - 1) + func(n - 2);
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    
    printf("%d", func(n));
    
    return 0;
}

程序代码:
#include<stdio.h>
int main()
{
    int n = 0, i = 0, a[1000] = { 0 };
    a[0] = 0;
    a[1] = 1;
    scanf("%d", &n);
    
    for (i = 2; i <= n; i++)
    {
        a[i] = a[i - 1] + a[i - 2];
    }
    
    printf("%d", a[n]);
    return 0;
}
收到的鲜花
  • 甲级黎庶2017-10-13 06:46 送鲜花  3朵   附言:好文章

早知做人那么辛苦!  当初不应该下凡
2017-10-12 20:47
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
记得这个数列是有通项公式的(像2楼说搜搜就能搜到了)~而且在一定的数据范围内还可以用快速幂求解~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-10-12 20:56
甲级黎庶
Rank: 2
等 级:论坛游民
帖 子:52
专家分:15
注 册:2017-10-4
得分:0 
好的,谢谢大佬
2017-10-13 06:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
矩阵运算 + 快速幂

因为
|0 1|   |A|   | B |
|   | * | | = |   |
|1 1|   |B|   |A+B|
所以第N个Fibonacci就是第一项的N次方乘以第二项。

程序代码:
unsigned fibonacci( const unsigned& first, const unsigned& second, size_t n )
{
    // a *= b
    #define MUL(a,b) do {\
        unsigned t00 = a##00*b##00+a##01*b##10;\
        unsigned t01 = a##00*b##01+a##01*b##11;\
        unsigned t10 = a##10*b##00+a##11*b##10;\
        unsigned t11 = a##10*b##01+a##11*b##11;\
        a##00=t00, a##01=t01, a##10=t10, a##11=t11;\
    } while(0)

    unsigned r00=1,r01=0,r10=0,r11=1;
    for( unsigned v00=0,v01=1,v10=1,v11=1; n!=0; n/=2 )
    {
        if( n%2 == 1 )
            MUL(r,v); // r*=v
        MUL(v,v); // v*=v;
    }
    return r00*first + r01*second;

    #undef MUL
}

#include <stdio.h>

int main( void )
{
    printf( "f(0) = %u\n", fibonacci(0,1,0) );
    printf( "f(1) = %u\n", fibonacci(0,1,1) );
    printf( "f(2) = %u\n", fibonacci(0,1,2) );
    printf( "f(3) = %u\n", fibonacci(0,1,3) );
    printf( "f(7) = %u\n", fibonacci(0,1,7) );
}

2017-10-13 08:38
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用rjsp在2017-10-13 08:38:19的发言:

矩阵运算 + 快速幂

所以第N个Fibonacci就是第一项的N次方乘以第二项。
  比如:13=()^N*()
        21=()^N*()
???????

DO IT YOURSELF !
2017-10-13 09:18
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 7楼 wp231957

                |0 1|^13   |fibonacci(0)|
fibonacci(13) = |1 1|    * |fibonacci(1)| 的结果矩阵的第0行第0列的数

另外需要提示的是,任何矩阵的0次方都是对角线为1的矩阵,如 |1 0|
                                                         |0 1|
2017-10-13 10:00
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 8楼 rjsp
没学过矩阵 不知道那玩意咋计算 有神马用途

DO IT YOURSELF !
2017-10-13 10:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
回复 9楼 wp231957
矩阵的乘法公式:
|a,b| * |e,f|   |a*e+b*g,a*f+b*h|
|c,d| * |g,h| = |c*e+d*g,c*f+d*h|
也就是结果矩阵的第i行第j列 = 第一个矩阵的第i行 与 第二个矩阵的第j列 对应的数值相乘的累加和
2017-10-13 10:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481332-1-1.html




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

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