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