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.
