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

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