斐波那契数列样例:1,1,2,3,5,8……
特征:第一个和第二个数值都为1,从第三个数值起,每个数值的计算规律都是当前数值的上一个数值+上两个数值。例如上面例子中的第三个数值为2=1+1,第四个数值为3=2+1,第五个数值为5=3+2.以此类推。利用代码实现求第N个数值。
方法一:使用for循环实现
变量步骤解析
循环次数 | int one | int two | num |
---|---|---|---|
第一次 | - | - | 1 |
第二次 | - | - | 1 |
第三次 | 1 | 1 | 2 |
第四次 | 1 | 2 | 3 |
第五次 | 2 | 3 | 5 |
第六次 | 3 | 5 | 8 |
从第三次开始,每一次的变量one都是上两次的num 变量two都是上一次的num。
//使用循环
//k=求第几个数值
public static int f1(int k) {
int num = 0;//记录第K个数值
int one = 1;//第一个数值
int two = 1;//第二个数值
if (k == 1 || k == 2) {//如果K=1或2,则表示计算第一个和第二个数值,斐波那契数列特征都是从1开始计算,直接返回1。
return 1;
}
for (int i = 3; i <= k; i++)//从第三个开始,循环到K个数值结束
{
num = +one + two;//例如从第三个数值开始,则等于第一个数值+第二个数值的和
one = two;//计算完第三个数值后,需要将目前的第一个数值变量更换为第二个,
two = num;//第二个数值变量更换为num也就是第三个数值,
//接着从头循环开始计算第四个数值
}
return num;//返回最终计算结果
}
方法二:使用递归实现
//使用递归
//i=求第几个数值
public static int f(int i) {
if (i == 1 || i == 2) {//如果i=1或2,则表示计算第一个和第二个数值,直接返回1。
return 1;//递归出口
}
//否则递归调用当前方法,例如i=3 求第三个数值的话 就等于 第二个数值f(3-1)加上第一个数值f(3-2)的和
return f(i - 1) + f(i - 2);
}
测试demo:
public static void main(String[] args) {
//斐波那契数列 1,1,2,3,5,8……
System.out.println(f1(10));//调用循环
System.out.println(f(10));//调用递归
}
结果:
55
55