输入参数N为台阶数,斐波那契数列的变形
问题描述:可以上一级,上两级和上三级,问有多少种方法走完N阶台阶。
解法思路:一级:1种走法。
二级:可以是1-1,2。共两种走法
三级:可以是1-1-1,1-2,2-1,3。共四种走法。
那么第四级的走法为前三级走法的和,因为,第一级直接走到第四级只有一种走法,那就是1-3,第二级直接走到第四级只能走2步也就是1-1-2和2-2两种,第三季直接走到第四级也是在原本的四种走法上走一步,即四种走法。那么可以推出递推公式:
f(4) = f(n-1)+(n-2)+f(n-3);
java代码
public class LadderDynamicProgramming { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = scan.nextInt(); int a[] = new int[num]; a[0] = 1; a[1] = 2; a[2] = 4; for (int i = 3; i < a.length; i++) { a[i] = a[i-1]+a[i-2]+a[i-3]; System.out.println("第"+i+"级总的走法是:"+a[i]); } System.out.println("总的走法是:"+a[num-1]); } }
斐波那契数列:
f(0)=0;
f(1)=1;
f(2)=f(1)+f(0);
f(3)=f(2)+f(1);
f(n) = f(n-1)+f(n-2);
代码
public class Algorithm { /** * 斐波那契数列非递归解法 * @param n * @return */ public static int Fibonacci(int n){ int result[] = {0,1}; if(n<2){ return result[n]; } int fibOne = 0,fibTwo=1,fibN=0; for (int i=2;i<=n;i++){ fibN = fibOne+fibTwo; fibOne = fibTwo; fibTwo = fibN; } return fibN; } public static void main(String[] args) { System.out.println(Fibonacci(10)); } }