Prima di proseguire...
Potrebbe interessarti la nostra collezione di esercizi C risolti?
Oggi illustro le funzioni ricorsive per eseguire le somme, divisioni e potenze successive, spiegate in modo iterativo su https://www.thecsea.it/tutorial/2010/07/operazioni-successive-moltiplicazione-divisione-e-potenza/
Vediamo prima la più semplice e cioè la moltiplicazione:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include<stdio.h> #define MAX 100 int moltiplica( int a, int b); int main(){ //dichiarazioni int a,b; //acquisizione do { printf ( "inserisci a : " ); scanf ( "%d" ,&a); printf ( "inserisci b : " ); scanf ( "%d" ,&b); } while (a < 0 || b < 0); //calcoli printf ( "%d\n" ,moltiplica(a,b)); } int moltiplica( int a, int b){ if (b == 0 || a == 0) return 0; if (a == 1) return b; if (b == 1) return a; return a+moltiplica(a,--b); } |
Il suo funzionamento è abbastanza semplice : ogni volta ritorno a+ il valore a*(b-1). Naturalmente non può essere usata con numeri negativi.
Ora invece vediamo la divisione:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include<stdio.h> #define MAX 100 int divisione( int a, int b); int main(){ //dichiarazioni int a,b; //acquisizione do { printf ( "inserisci a : " ); scanf ( "%d" ,&a); printf ( "inserisci b : " ); scanf ( "%d" ,&b); } while (a < 0 || b < 0); //calcoli printf ( "%d\n" ,divisione(a,b)); } int divisione( int a, int b){ if (a == 0) return 0; if (b == 0) return -1; return 1+divisione(a-b,b); } |
Anche qui il suo funzionamento è abbastanza semplice : ogni volta ritorno 1 sommato alla divisione di (a-b)/b. Naturalmente non può essere usata con numeri negativi.
N.B questa versione al contrario di quella proposta su https://www.thecsea.it/tutorial/2010/07/operazioni-successive-moltiplicazione-divisione-e-potenza/ ritorna solo il quoziente intero troncato.
Infine vediamo il calcolo di potenze intere:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include<stdio.h> #define MAX 100 int potenza( int a, int b); int main(){ //dichiarazioni int a,b; //acquisizione do { printf ( "inserisci a : " ); scanf ( "%d" ,&a); printf ( "inserisci b : " ); scanf ( "%d" ,&b); } while (a < 0 || b < 0); //calcoli printf ( "%d\n" ,potenza(a,b)); } int potenza( int a, int b){ if (a == 0) return 0; if (b == 0) return 1; if (a == 1) return 1; if (b == 1) return a; return a*potenza(a,--b); } |
In pratica ogni volta ritorno il valore di a moltiplicato per a^(b-1). Naturalmente non può essere usata con numeri negativi.
moltiplicazioni, divisione e potenza(intera) mediante funzioni ricorsive by cardinale claudio is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.