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:
#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:
#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:
#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.