如何用java方法最优雅的实现斐波那契数列

90后的80人 2014-10-31 09:21:05
如题;大家都说说。。。。
...全文
3812 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
babycool252 2017-04-19
  • 打赏
  • 举报
回复
return (int) Math.round(1 / 2.2360679774998 * (Math.pow(1.618033988749895,n+1) - Math.pow(-0.618033988749895,n+1)));
Jonny_qian 2017-02-14
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_85790123010155m8.html
chen870201 2014-11-02
  • 打赏
  • 举报
回复
貌似都不够啊
日知己所无 2014-11-01
  • 打赏
  • 举报
回复
参考:http://en.wikibooks.org/wiki/Algorithm_Implementation/Mathematics/Fibonacci_Number_Program#Java 最优雅估计是:Simpler Iterative Version了
public int fibonacci(int N) {
      int lo = 0;
      int hi = 1;
      for (int i = 0; i < N; i++) {
          hi = lo + hi;
          lo = hi - lo;
      }
      return lo;
  }
递归虽然也优雅,但是数稍微大一点儿,程序就崩溃了 另外每回都重新从头计算,执行效率会很低 迭代速度快,用BigInteger替换一下,再来个本地数组或者文件保存一下之前的计算结果,才能保证不论多大的数都能得出正确的结果【如果不用BigInteger,不到第100个就由于溢出,出现负数的结果了】
public class Fibonacci {
    public static void main(String[] args) {
        long[] fibonacci = new long[51];
        fibonacci[1] = 1;
        fibonacci[2] = 1;
        for (int n = 3; n <= 50; n++) {
            fibonacci[n] = fibonacci[n - 1] + fibonacci[n - 2];
            System.out.println(n + ":" + fibonacci[n]);
        }
    }
}
humanity 2014-10-31
  • 打赏
  • 举报
回复
其实数学公式已经写得很明白了,整数相加在编程中很简单的事情。写个递归的函数也很简单。
sunbo624 2014-10-31
  • 打赏
  • 举报
回复
x是第一个 y是第二个 y = x + y; 把y变成第三个 x = y - x; 吧x变成第二个(之前的y) 循环 x就是你要求的那个
天空之城B哥 2014-10-31
  • 打赏
  • 举报
回复
迭代嘛,,最简单了
healer_kx 2014-10-31
  • 打赏
  • 举报
回复
能写出来就不错了,还优雅。。。 再说了,Java写出来的代码永远都不能用优雅形容。
90后的80人 2014-10-31
  • 打赏
  • 举报
回复
只是表示下这个数列就可以了 用代码实现的 先不用求和什么的
humanity 2014-10-31
  • 打赏
  • 举报
回复
数列嘛,不就是递归和递推这两种方式么,你想怎么个优雅法子呢。 不过有时候人家出题是问给数列求和,这时候就只能用递推了(性能原因),少数人没注意到差别,写出递归的代码来求和当然不过关了。
965攻城狮 2014-10-31
  • 打赏
  • 举报
回复
递归很浪费时间,会计算一个式子很多次。所以我觉得还是直接加
90后的80人 2014-10-31
  • 打赏
  • 举报
回复
引用 9 楼 sddh1988 的回复:
f(n) { return n>2?f(n-1)+f(n-2):1; }
这个才是优雅的 public int f(int n){return n>2?f(n-1)+f(n-2):1;}
song_suo 2014-10-31
  • 打赏
  • 举报
回复
f(n) { return n>2?f(n-1)+f(n-2):1; }
阿良良木月火 2014-10-31
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
如果常规被人们普遍认可的方式都不优雅的话我也没办法了。。
90后的80人 2014-10-31
  • 打赏
  • 举报
回复
都不够优雅啊

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧