2014-09-06 48 views
0

我有一個簡單的遞歸方法諧:簡單的遞歸方法諧

public static int harmonicOf(int n) 

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

它總是返回1,我明白爲什麼做到這一點。我也知道,如果我從int切換到double,那麼它也可以工作。

我只是很好奇,爲什麼這是 - 爲什麼它是雙倍的時候它不會也返回1,並且有沒有任何可能的方式使用int

+0

使用整數變量來存儲浮動值是沒有意義的。所以只是你不能用int來做它。 – Athiruban 2014-09-06 14:28:13

回答

0

如果您使用的是整數1,當n> 2時,n將等於零。 這是因爲(例如)1/3實際上是0,因爲它是用整數來評估的。 最後當你在多次遞歸後得到0 + harmonicOf(2-1)時,它會返回1,因爲harmonicOf(1)是1.

如果你想修復它,不要使用整數,或雙倍。對於n> 1的任何值,這樣1/n將被評估爲十進制而不是0

1

如果該方法返回一個int,則1/n + harmonicOf(n-1)被評估爲int。這意味着1/n對於每個n > 1都是零。這就是爲什麼1被返回。

如果方法返回float或double,1/n + harmonicOf(n-1)評估爲float或double(基於返回類型harmonicOf(n-1))。這就是爲什麼1/n也被評估爲float或double,並且可能不爲零。