moltiplicazioni, divisione e potenza(intera) mediante funzioni ricorsive


Oggi illustro le funzioni ricorsive per eseguire le somme, divisioni e potenze successive, spiegate in modo iterativo su http://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 http://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.

CC BY-SA 4.0 moltiplicazioni, divisione e potenza(intera) mediante funzioni ricorsive by cardinale claudio is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Lascia un commento