算法-斐波那契和变种的学习

    xiaoxiao2021-03-25  159

    方法1:递归方法

    /* * 斐波那契数列 * 0 1 1 2 3 5 8 13 21........ * 就是Fn=F n-1 + F n-2 ,某一个数字都是它前面2个数字之和 ,求第n位 * * * * * */ package alg3yur8; public class Feb { public static long getFeb(int n) { if(n == 1) return 0; if(n == 2) return 1; //下面是递归的核心 ,调用函数的本身 return getFeb(n-1)+getFeb(n-2); //括号里面的下标数字必须有变动,要不然是递归死循环 } public static void main(String[] args) { System.out.println(getFeb(4)); } }

    方法2 变量交换循环相加

    /* * * 0 1 1 2 3 5 8 13 * 用循环的方法求斐波那契 * 变量交换 * 1 v1 + v2 = v3 * 2 把v3 交给v2 ,把v2交给v1 * 3 再执行 第一步,继续循环 * * */ package alg3yue81; public class Feb2 { public static long getFeb1(int n) { int val1 = 0 , val2=1 , val3=0 ; //定义 n-2 n-1 n //定义一个变量temp,用来存储val2变换前的值 int temp = 0; // for(int i = 1; i<= n-2; i++ ) { val3 = val1+val2; //要有一个东西保存好val2 ,因为在交换之前就变掉了 temp = val2; val2 = val3; val1 = temp; } return val3; } public static void main(String[] args) { System.out.println(getFeb1(7)); } } 思路:

    参考文献

    http://blog.csdn.net/tommyzht/article/details/47054125

    转载请注明原文地址: https://ju.6miu.com/read-2220.html

    最新回复(0)