java - 简单递归调和法

标签 java recursion computer-science

我有一个简单的递归谐波方法:

 public static int harmonicOf(int n)

{ 
  if(n==1)
  {
      return 1;
  }
  return 1/n + harmonicOf(n-1);
}

它总是返回1,我明白它为什么这样做。我还知道,如果我将所有内容从 int 切换为 double,那么它也可以工作。

我只是很好奇为什么会这样 - 为什么当它是 double 时它不也返回 1 并且是否有任何可能的方法来使用 int

最佳答案

如果该方法返回一个 int,则 1/n + HarmonicOf(n-1) 将被计算为一个 int。这意味着对于每个 n > 11/n 都为零。这就是返回 1 的原因。

如果该方法返回 float 或 double,则 1/n + HarmonicOf(n-1) 被计算为 float 或 double(基于 harmonicOf(n-1) 的返回类型) )。这就是为什么 1/n 也被计算为 float 或 double,并且可以为非零。

关于java - 简单递归调和法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701145/

相关文章:

java - Ant 错误 "Exception in thread "AWT-EventQueue- 0"java.lang.NoClassDefFoundError: com/sun/jna/Library"

java - Oracle Hibernate 映射 - NUMBER(4,0)

java - 我坚持以递归方式实现基数排序

java - 我怎样才能制作一个不是别名的字符串的副本,而是组成该字符串的所有字符的副本?

java - 什么更快 : to create a new array or iterate through existing?

java - Listnode实现计数出现次数方法的问题(递归)

java - 给定两个字符串,递归地确定 1 是否是另一个的子字符串

haskell - 所有函数类型都形成 `Hask` 的子类别吗?

computer-science - 响应式(Reactive)编程和pi演算有共同点吗?

c++ - 用于 ASCII 的环绕式 C++