【问题标题】:Why use an integer versus a double?为什么使用整数而不是双精度数?
【发布时间】:2016-02-18 03:48:40
【问题描述】:

我有相同函数的两个版本的代码:一个迭代和一个递归。我想知道为什么返回类型是int。它能给你带来什么?为什么返回类型不能是double?

public static int iterative(int n){
  int var=1;
  int var1=1;
  int var2=1;

  if (n<=1) {
    return 1;
  }

  for(int i=2;i<=n;i++){
    var=var1+var2+1;
    var2=var1;
    var1=var;
  }

  return var;
}

private static int recursive(int n){
  if (n<=1){
    return 1;
  }

  return rec(n-1)+rec(n-2)+1;
}

public static void main(String[] args) {
  System.out.println(iter(10));
}

【问题讨论】:

  • 猜测,因为这就是作者想要的。返回类型可以是double、float、long、......
  • 为什么要这样? fibonnaci 的结果总是一个整数。所以不需要为双精度(双精度64位,整数32位)浪费内存
  • 如果您将 private static int 更改为 private static double 它应该仍然有效 - 至少对于 rec
  • 任务说 L(0) = 1 L(1) = 1 L(n) = L(n - 1) + L(n - 2) + 1 当 n > 1. 和 i必须打印从 0 到 30 的数字。当它是 double 时会发生什么?
  • 结果看起来像 1.0, 2.0, 3.0, 5.0, 8.0 ...

标签: java integer double


【解决方案1】:

您当然可以将函数定义为返回double,就像您可以将其定义为返回String。这些格式能够表示您将返回的值,没有理由这样做。

  • 您正在计算的函数(修改后的斐波那契数列)是在整数集上定义的——事实上,只有正整数。它永远不会产生无法用int 表示的值。
  • double(和String)在空间和计算上都更昂贵。
  • 返回类型是对其他开发人员期望什么样的数据的强烈指示。返回仅包含 1, 2, 3, ... 的 double 在某种程度上具有误导性。

如果你愿意,请使用double;它会工作得很好。但问题更多的是“为什么?”而不是“为什么不呢?”。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多