Frazione Continua Se a0 è un numero intero qualsiasi, e a1, a2

Frazione Continua
Se a0 è un numero intero qualsiasi, e a1, a2, ..., an sono interi positivi, la notazione [a0, a1, a2, ..., an] indica la
"frazione continua" rappresentata dall'espressione
[a0, a1, a2, ..., an]= a0 + 1/ (a1+1/(a2+1/(a3+1/(a4+...1/an)))
in forma un pò più visiva
[π‘Ž0 , π‘Ž1 , π‘Ž2 , … , π‘Žπ‘› ] = π‘Ž0 +
1
π‘Ž1 +
1
π‘Ž2+
π‘Ž3 +
1
1
……………
………………………….
………………….
……………
………
……
1
π‘Žπ‘›−1 +
π‘Žπ‘›
Ad esempio, [-1;5,2,4]= -1+1/(5+1/(2+1/4)). Ovviamente, [a0, a1, a2, ..., an] è un numero razionale.
PROBLEMA A: utilizzo di ricorsione
Scrivere un programma che riceve in input da linea di comando (ovvero tramite l’array String args[] che è
argomento del metodo main) i numeri interi a0, a1, a2, ..., an e calcola, TRAMITE UN METODO STATICO
RICORSIVO, il valore di [a0, a1, a2, ..., an] se i numeri a1, a2, ..., an sono tutti positivi. In caso contrario, ovvero
se almeno uno tra gli a0, a1, a2, ..., an è negativo, il programma stampa il valore double NaN (Not a Number).
PROBLEMA B: utilizzo di un costrutto di iterazione
Risolvere il problema senza ricorsione, ma utilizzando un costrutto di iterazione che sostituisca la ricorsione.
SUGGERIMENTO per leggere i valori di a0, a1, a2, ..., an (passati come argomenti da linea di comando):
a0, a1, a2, ..., an vengono salvati come stringhe nell’array String args[], dichiarato come parametro formale del
metodo main (ricordate … public static void main(String args[]){…}). Per ottenere il loro valore intero o double
è sufficiente estrarli da args convertendo il loro tipo tramite l’operatore di cast.
public static void main(String args[]){
double fraz= new double[args.length];
for (int i=0; i<args.length; i++) fraz(i)=Double.parseDouble(args[i]);
…….
}
Esempi d'esecuzione
Il calcolo di [4;2,6,7] si ottiene lanciando il comando:
>java Soluzione 4 2 6 7
Frazione continua calcolata = 4.46236559139785
Se si volesse ottenere una approssimazione di pi greco si potrebbe calcolare [3;7,15,1,292]:
>java Soluzione 3 7 15 1 292
Frazione continua calcolata = 3.1415926530119025
Infine se si inserisse un valore negativo tra gli a1, a2, ..., an il programma dovrebbe stampare il valore DOUBLE
(!!!!) NaN
>java Soluzione 3 4 1 -7 2
Frazione continua calcolata = NaN
Mentre un valore negativo al posto di a0 è pienamente lecito; se si calcola [-5;4,2,3,1] infatti si ottiene:
>java Soluzione -5 4 2 3 1
Frazione continua calcolata = -4.775