C
2.2 - Ricorsione
In questo esempio vediamo, invece, come sia possibile effettuare una chiamata ricorsiva ad una funzione.
La funzione "factorial" richiama se stessa finchè il numero a parametro non diventa 1.
/* Funzione Fattoriale Ricorsiva */
#include
long factorial(long);
main()
{
int i;
for (i = 1; i <= 10; i++)
{
printf("%2d! = %d\n", i, factorial(i));
}
return 0;
}
long factorial(long number)
{
if (number <= 1)
return 1;
else
return (number * factorial(number - 1));
}
Ultimo aggiornamento 14/04/2023 16:44:35
Fondamenti
Il computer capisce solo 10 numeri.
Avrete visto un sacco di volte il famoso meme:
"al mondo ci sono 10 tipi di persone: chi capisce il sistema binario e chi no".
I computer fanno parte della prima categoria.
Certo, io accendo il mio PC e posso usare la mia bellissima "calc.exe" e fare tutte le operazioni del mondo, ma se per me "utente" è visibile 6*5 = 30, la macchina, dietro le quinte, deve ragionare con il poco che ha a disposizione.
Quel poco, negli anni, è diventato moltissimo, esageratamente molto, ma questo molto non è altro che una potenza con grandissimo esponente e base piccolissima, la più piccola base possibile: 2.
Leggi tutto
Ultimo aggiornamento 14/04/2023 16:27:11
C
2.1 - Visibilità
Un aspetto molto importante, non solo per il C, ma per tutti i linguaggi di programmazione, è capire bene la visibilità delle variabili all'interno delle singole porzioni di codice (tra cui appunto, le funzioni).
Nell'esempio qui sotto vediamo definite 3 funzioni (a, b e c) e dichiarata una variabile "globale" (x). Queste dichiarazioni vengono inserite prima (e fuori) del metodo "main".
Nella main è poi definita un'altra variabile x che questa volta è "locale" (locale del metodo main), viene inserita una porzioni di codice all'interno di parentesi graffe, stabilendo una nuova "visibilità".
Infine viene di nuovo definita una variabile x all'interno dell'implementazione delle funzioni.
Enjoy!
/* Un esempio di visibilità */
#include <stdio.h>
void a(void);
void b(void);
void c(void);
int x = 1; // Variabile Globale
main()
{
int x = 5; // Variabil Locale
printf("Variabile Locale x in tutta main(): %d\n", x);
{ // Porzione con nuova visibilità
int x = 7;
printf("Variabile Locale x in una porzione di main(): %d\n", x);
}
printf("Variabile Locale x in tutta main(): %d\n", x);
a(); // var x locale automatica
b(); // var x locale statica
c(); // usa la var x globale
a();
b();
c();
printf("Variabile Locale x nella main(): %d\n", x);
return 0;
}
void a(void)
{
int x = 25;
printf("\nVariabile Locale x e' %d alla chiamata di a\n", x);
++x;
printf("Variabile Locale x e' %d all'uscita da a\n", x);
}
void b(void)
{
static int x = 50;
printf("\nVariabile Locale Statica x e' %d alla chiamata di b\n", x);
++x;
printf("Variabile Locale Statica x e' %d all'uscita da b\n", x);
}
void c(void)
{
printf("\nVariabile Globale x e' %d alla chiamata di c\n", x);
x *= 10;
printf("Variabile Globale x e' %d all'uscita da c\n", x);
}
Ultimo aggiornamento 09/09/2022 12:26:15