文章目录
前言
使用Android可视化实现斐波那契数,利用五种方法(迭代、迭代改进、递归、显示公式、矩阵)求解计算,还有另外执行时间和不超过编程环境支持的最大整数的斐波那契等等要求
ps:算法实验要求斐波那契数列求解,还要求可视化,啊,一开始看头都大😕
顺带吐槽一下java代码,个人认为有些功能还挺复杂(😳应该是学艺不精,还经常被html的舍友说不如跟我一起C#,C#多快啊,但是没办法他是大佬,学了Android还是要用java😱)
(算法和代码也许会有与其他大佬雷同 作为学生我也很苦,呜呜呜)
(个人实验总结,为自己以后笔记,不作其他用途,仅供参考)
一、斐波那契数是什么?实验具体实验要求是什么?
啊 🙃 斐波那契数列 我觉得大概就是第3项开始,每一项都是等于前两项的和。
Emmmmmm ,实验要求,太懒了就直接贴老师的要求。
二、具体实验要求实现
1.利用五种方法计算斐波那契数
五种方法代码
代码如下(递归方法):
(int countNumber)
(countNumber 我是用来计算基本操作次数的,不需要的也可以删掉,直接去掉countNumber++也不影响算法
//递归方法
public long recursion(int n) {
countNumber1++; //用于计数可以直接去掉,不影响算法
if (n == 1 || n == 2) {
return 1; //保证前两个数为1
}
if (n > 2) {
return recursion(n - 1) + recursion(n - 2); //递归调用
}
return -1;
}
递归和迭代应该不需要多解释吧,接下来是(迭代方法),(老样子countNumber用来计数)
就是将值相加,然后让前面两个数往后移
//普通迭代
public long iteration(int n) {
long result = 0, previous = 1, previousPro = 1; //previous为前一个,previousPro为再前一个
if (n == 1 || n == 2) {
countNumber2 = 1; //用于计数可以直接去掉,不影响算法
return 1;
}
if (n > 2) {
for (int i = 2; i < n; i++) {
countNumber2++; //用于计数可以直接去掉,不影响算法
result = previous + previousPro;
previousPro = previous;
previous = result;
}
return result;
}
return -1;
}
显示公式(注意返回值哦,因为是无理数)
//显示公式
public double formulas(int n) {
double result = 0;
double temp = Math.sqrt(5.0); //因为带有√5 分之一 所以要用double哦!
result = (1 / temp) * (Math.pow((1 + temp) / 2, n) - Math.pow((1 - temp) / 2, n));
return result;
}
迭代改进 不得不说迭代改进yyds 真的快
循环变量折半 然后还考虑了输入的n为奇数还是偶数
(用它就完事了,正常来说谁用递归 害)
//迭代改进算法
public long iteration_plus(int n) {
if (n > 1) {
long a;
long b = 1;
n--;
a = n & 1;
n /= 2;
while (n-- > 0) {
countNumber3++;
a += b;
b += a