visto che non risponde nessuno ....
purtroppo non conosco java e non ho il compilatore a disposizione,
ma ho riscritto il tuo esercizio in php ( si dice, se non è zuppa è pan bagnato .... )
controlla se è corretto nel for di "H" i==k
mentre penso che esca dalla funzione harmonicSum con n incrementato di 1 rispetto al valore atteso
questo lo script php che, immagino puoi ben capire,
PHP:
<?php
function H($k)
{
$HarmonicNum = 0;
for( $i=1; $i<=$k; $i++ )
{
$HarmonicNum += (float) 1 / $i;
}
return $HarmonicNum;
}
function HarmonicSum($x)
{
$k = 0;
$HarmonicSum = 0;
while( $HarmonicSum < $x )
{
$k++;
$HarmonicSum += (float) H($k);
}
return $k;
}
echo "<h2>Harmonic Num</h2>";
$HN = 1; echo "k = ".$HN." : ".H($HN)."<br />";
$HN = 2; echo "k = ".$HN." : ".H($HN)."<br />";
$HN = 3; echo "k = ".$HN." : ".H($HN)."<br />";
$HN = 5; echo "k = ".$HN." : ".H($HN)."<br />";
$HN = 7; echo "k = ".$HN." : ".H($HN)."<br />";
$HN = 1000; echo "k = ".$HN." : ".H($HN)."<br />";
echo "<h2>Harmonic Sum</h2>";
$HS = 1; echo "x = ".$HS." : ".HarmonicSum($HS)."<br />";
$HS = 2; echo "x = ".$HS." : ".HarmonicSum($HS)."<br />";
$HS = 3; echo "x = ".$HS." : ".HarmonicSum($HS)."<br />";
$HS = 5; echo "x = ".$HS." : ".HarmonicSum($HS)."<br />";
$HS = 7; echo "x = ".$HS." : ".HarmonicSum($HS)."<br />";
$HS = 1000; echo "x = ".$HS." : ".HarmonicSum($HS)."<br />";
?>
questo il risultato