数据结构与算法练习 - 费式数列
数据结构与算法练习
费式数列
1 1 2 3 5 8 13 21 ...
要求:编程实现费式数列中第n项的数值并返回
1. 递归实现
public static int Fee(int n){
if (n == 1 || n == 2) {
return 1;
} else {
return Fee(n-1) + Fee(n-2);
}
}
public static void main(String[] args) {
System.out.println(Fee(8));
}
2. 递推实现
static int Fee(int n){
int ia = 1;
int ib = 1;
int ic;
for (int i = 3; i <= n; i++) {
ic = ia + ib;
ia = ib;
ib = ic;
}
return ib;
}
public static void main(String[] args) {
System.out.println(Fee(55));
}
思路:归纳法
int ia =1, int ib =1;
当n=1时,return 1 => return ib
当n=2时,return 1 => return ib
当n=3时, return 2 => ic = ia + ib; ia = ib; ib = ic => return ib
当n=4时,return 3 => ic = ia + ib; ia = ib; ib = ic => return ib
当n>2 时,执行n-2次,ic是为了ia和ib同时往后移动,如果不加入ic,ib=ia+ib,ib变化以后ia并没有移到ib变化之前的位置

浙公网安备 33010602011771号