这些变量如何在此斐波那契算法中起作用?

时间:2018-06-21 11:04:56

标签: c++

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

#define tip long
tip z;

tip Fibonacci(tip n ){
    tip i = 1, j = 0, k = 0, h = 1, t = 0;
    while( n > 0 )
    {
        z++;
        if( ((long) n) % 2 )
        {
            t = j * h;
            j = i * h + j * k + t;
            i = i * k + t;
        }
        t = h * h;
        h = 2 * k * h + t;
        k = k * k + t;
        n = n / 2;
     }
     return j;
}

int main()
{
    z = 0;
    cout << "\n\n\n 5th = " << Fibonacci( 5 );
    cout << "\n Nr. of iterations = " << z;

    z = 0;
    cout << "\n\n 10th = " << Fibonacci( 10 );
    cout << "\n Nr. of iterations = " << z;

    z = 0;
    cout << "\n\n 20th = " << Fibonacci( 20 );
    cout << "\n Nr. of iterations = " << z;

    z = 0;
    cout << "\n\n 40th = " << Fibonacci( 40 );
    cout << "\n Nr of iterations = " << z;
    cout << "\n\n";

    return 0;
}

我有这样的程序。没有注释,变量名称没有意义。

程序正在运行。没有错误,或其他。它只显示数值和迭代次数。

问题:

我不明白这些变量( *i, j, k, h, t* )是什么意思?
他们在这种算法中做什么?
这是什么算法?

1 个答案:

答案 0 :(得分:5)

此代码段通过矩阵幂计算斐波那契数列的各个条目。变量i,j,k,h对矩阵[1,0;0,1]进行编码。变量t是一个临时变量。整个过程很可能是如何执行此操作的一个示例:没有注释,没有有用的变量名,没有检查溢出等等。