Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-07-2011, 15:36   #1
mic85rm
Senior Member
 
Iscritto dal: Dec 2003
Città: roma
Messaggi: 1631
Funzione ricorsiva in c

Scrivere una funzione in c,sia in versione iterativa che ricorsiva,che conta le occorrenze di un valore intero all'interno di una lista di variabili strutturate di tipo


Codice:
struct item{
            int val;
            struct item *next;
}
a partire dall'indirizzo del suo primo elemento.

La mia soluzione iterativa è questa:

Codice:
int conta_lista(struct item *p,int valore)
{
   int conta=0;
   /* ciclo di scansione */
   while(p != NULL)
   {
      if(p->val==valore){conta++;} //verifico se il valore della lista è
                                   //è uguale a quello che voglio contare
      p = p->next; // scorre di un elemento
   }
return conta;
}
qualcuno ha qualche idea su come renderla ricorsiva?

Ultima modifica di mic85rm : 01-07-2011 alle 15:38.
mic85rm è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 15:57   #2
oNaSsIs
Member
 
L'Avatar di oNaSsIs
 
Iscritto dal: Apr 2007
Messaggi: 182
Prova a pensare a queste due cose:
  • qual è la condizione di arresto
  • cosa devi fare ad ogni chiamata prima di dover richiamare la funzione
oNaSsIs è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 16:07   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Per renderla ricorsiva, oltre ai due parametri presenti nella versione iterativa, è neccessario un argomento in più: il contatore delle occorrenze trovate (che nella versione iterativa è una variabile locale)

La funzione 'conta_lista' ricorsiva, compie tre 'passi' nel suo corpo:
1) controlla se siamo arrivati al 'caso base' (cioè se la ricorsione è terminata) ovvero se il puntatore alla struttura vale NULL, nel qual caso ritorna il controllo al chiamante;
2) esegue la sua funzionalità, ovvero controlla se il valore del campo val è uguale a quello cercato e in tal caso incrementa il contatore;
3) infine esegue la chiamata ricorsiva: ovvero incrementa il valore del puntatore alla struct in modo che punti all'elemento successivo e richiama se stessa passando i tre argomenti.

Ti è chiaro il ragionamento?
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 16:11   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2795
Un altro modo è, senza il parametro "conta", restituire 1 + la chiamata ricorsiva se l'elemento corrente è quello cercato altrimenti 0 + la chiamata ricorsiva
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 16:14   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da wingman87 Guarda i messaggi
Un altro modo è, senza il parametro "conta", restituire 1 + la chiamata ricorsiva se l'elemento corrente è quello cercato altrimenti 0 + la chiamata ricorsiva
Bello l'importante è che mic85rm capisca la logica
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 16:29   #6
mic85rm
Senior Member
 
Iscritto dal: Dec 2003
Città: roma
Messaggi: 1631
ora provo...cmq la funzione iterativa è corretta?
mic85rm è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 16:36   #7
mic85rm
Senior Member
 
Iscritto dal: Dec 2003
Città: roma
Messaggi: 1631
Codice:
int conta_lista(struct item *p,int valore)
{
   int conta=0;
   if (p==NULL){ return conta;}
   if (p->val==valore){conta++;conta_lista(p->next,valore)}
   if (p->val!=valore){conta_lista(p->next,valore)}
}
mic85rm è offline   Rispondi citando il messaggio o parte di esso
Old 01-07-2011, 16:51   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2795
Nelle chiamate ricorsive non viene conservato il valore di "conta" se non lo passi come parametro.
La versione iterativa ad occhio sembra corretta
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2011, 02:30   #9
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Si può fare in 2 righe (come già consigliato da wingman87 nel suo primo post)

Codice:
se puntatore == NULL return 0;
return (puntatore->val == valore) + chiamata ricorsiva(...)
e ti ho detto anche troppo

edit:
comunque cerca di capire come funziona la cosa.. per capire bene usa carta e penna
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 02-07-2011, 16:17   #10
british
Member
 
L'Avatar di british
 
Iscritto dal: Sep 2008
Città: Milano
Messaggi: 126
Che cos'è un libro? un insieme ordinato di capitoli. Oppure? un capitolo seguito eventualmente da un altro libro.
Che cos'è un treno? Un insieme ordinato di vagoni. oppure? un vagone eventualmente seguito da un altro treno.

Quindi, se un vagone è lungo 1, quanto è lungo un treno?
1 (il primo vagone) + la lunghezza del treno "rimanente".. e quest'altro treno quanto è lungo? 1 + la lunghezza del suo treno "rimanente"... e quando arrivo all'ultimo vagone che non ha più niente attaccato? questo è il cosiddetto "passo base": 1 +0.

ciao!

british
british è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
SpaceX e Singulus: stretto un accordo pe...
Binance avvisa: un bug di iOS mette a ri...
Apple corregge 9 vulnerabilità su iPhone...
Microsoft inaugura il Pavilion a Roma, c...
Black Friday, l'errore che può co...
Lotus avrà un V8 ibrido da 670 CV...
IBM: solo il 26% delle imprese dimostra ...
Hacker contro hacker e danni per 740.000...
Xiaomi SkyNomad, boom da 27.147 auto in ...
Logitech concede un giorno di ferie ai s...
Amazon, questi mini PC hanno un display ...
BYD prepara una rivale di smart #2? Il b...
Amazon, 3 robot tagliaerba ECOVACS GOAT ...
La cifratura di WhatsApp e Signal funzio...
Motori elettrici cinesi contro quelli oc...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v