#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* )
是什么意思?
他们在这种算法中做什么?
这是什么算法?
答案 0 :(得分:5)
此代码段通过矩阵幂计算斐波那契数列的各个条目。变量i,j,k,h
对矩阵[1,0;0,1]
进行编码。变量t
是一个临时变量。整个过程很可能是如何不执行此操作的一个示例:没有注释,没有有用的变量名,没有检查溢出等等。