今天在公司实习,实在没啥活是我能干的,就想着写一写算法打发时间,正好看到了斐波那契数列,搞起。
这是斐波那契数列的通项公式:
以前用递归写过,今天看的时候书上说递归虽然简单,但其实内部做了很多重复的计算,而且尾递归都是可以用循环解决的。而用循环就可以避免重复的计算。
import java.util.Scanner;
public class Jianzhi{
public static void main (String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
n = fibonacci(n) ;
System.out.println(n) ;
}
public static int fibonacci(int n ) {
int f0 = 0;
int f1 = 1;
int fn = 0 ;
if (n == 0) {
return f0;
}
if (n == 1) {
return f1;
} else {
for (int i = 2; i <= n; i++) {
fn = f0 + f1; //当前循环所得的斐波那契数等于前一个加上前前个
f0 = f1 ; //当前循环所得的斐波那契数的前一个数,作为下次循环的前前个次数
f1 = fn ; //当前循环所得的斐波那契的数,作为下次循环的前一个数
}
return fn;
}
}
}
斐波那契数列的变换:
比如,从前有一只青蛙,它一次可以跳一个台阶,也可以一次跳两个台阶,求一个N阶的台阶他会用几种跳法。
那就是假设就1个台阶 那就只有1种跳法;如果有2个台阶,那就有2种;以此类推:
1 1
2 2
3 3
4 5
完毕。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。