Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-05-2006, 14:20   #1
white05
Member
 
Iscritto dal: May 2005
Messaggi: 249
[c] ricorsione

Come trovare il minimo di un array 1D con metodo ricorsivo?
Ho provato varie strade ma credo di essere giunto a qualche cosa di troppo complesso! Deve esserci sicuramente un metodo MOLTO più facile!
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 14:25   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da white05
Come trovare il minimo di un array 1D con metodo ricorsivo?
Ho provato varie strade ma credo di essere giunto a qualche cosa di troppo complesso! Deve esserci sicuramente un metodo MOLTO più facile!
Scusa... perché usare la ricorsione quando basta un semplice ciclo for??
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 15:02   #3
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da white05
Come trovare il minimo di un array 1D con metodo ricorsivo?
Ho provato varie strade ma credo di essere giunto a qualche cosa di troppo complesso! Deve esserci sicuramente un metodo MOLTO più facile!
qualcosa del genere:
Codice:
int array_min( int* data, int length )
{
  return rec_min( data[0], data+1, length -1);
}

int rec_min( int x, int* data, int length )
{
  if (length == 0 )
    return x;
  x = min(x,data[0])
  return rec_min( x , data+1, length-1);
}
Che tra l'altro dovrebbe risultare tail-recursive.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 15:16   #4
white05
Member
 
Iscritto dal: May 2005
Messaggi: 249
Quote:
Scusa... perché usare la ricorsione quando basta un semplice ciclo for??
perché purtroppo quando le persone incompetenti chiedono di realizzare qualche cosa per dei corsi non si rendono conto che così non insegnano a programmare ma confondono solo le idee....

Quote:
Che tra l'altro dovrebbe risultare tail-recursive.
tail-recursive significa???

Pensa che in realtà si dovrebbe creare una ricerca di minimo con ricorsione e approccio divide et impera...
assurdo da un punto di vista della logica della programmazione
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 15:59   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da white05
tail-recursive significa???
che si converte in un algoritmo iterativo con estrema naturalezza e semplicità

Quote:
Pensa che in realtà si dovrebbe creare una ricerca di minimo con ricorsione e approccio divide et impera...
prova questa porcheria ma non ti fidare troppo, l'ho scritta in 2 secondi senza manco provare
Codice:
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define F FunzioneTotalmenteImbecille

int FunzioneTotalmenteImbecille(int *Array, int Start, int End) {
    if (End == Start) {
        return Array[Start];
    }
    return MIN(F(Array, Start, Start + (End - Start) / 2),
        F(Array, Start + (End - Start) / 2 + 1, End));
}
Quote:
assurdo da un punto di vista della logica della programmazione
concordo, e sono sinceramente contento per te che tu l'abbia capito: vuol dire che nonostante le assurde richieste dei professori, se gli studenti ci mettono del loro alla fine qualcosa in termini di preparazione la guadagnano lo stesso. intendiamoci, ovviamente sarebbe tutto più facile se i professori evitassero di andare controcorrente...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 16:02   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ma perché non chiedi al tuo prof di farvi fare algoritmi che meritino realmente un approccio divide et impera? come ad esempio uno dei tanti algoritmi di ordinamento... -_-'
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 17:17   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da white05
perché purtroppo quando le persone incompetenti chiedono di realizzare qualche cosa per dei corsi non si rendono conto che così non insegnano a programmare ma confondono solo le idee....
Purtroppo non posso fare altro che quotare quanto appena detto. Direi volentieri qualcos'altro sui professori ... ma è meglio se non lo faccio.


Ah, per il minimo di un array ci ho provato anche io. Ecco la "mia" soluzione:
Codice:
int int_array_min (int *arr, int length)
{
    int min = *arr;

    if (length > 1)
        min = int_array_min (arr+1, length-1);

    return *arr < min ? *arr : min;
}

int main (void)
{
    int a[4] = { 12, 5, 7, 20 };
    int min;

    min = int_array_min (a, 4);

    return 0;
}
Non l'ho provata al 100% ma credo che sia ok.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 19:37   #8
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da 71104
ma perché non chiedi al tuo prof di farvi fare algoritmi che meritino realmente un approccio divide et impera? come ad esempio uno dei tanti algoritmi di ordinamento... -_-'
e vero, ma è l'unico modo per forzare gli studenti a provare la programmazione ricorsiva.

anche se sarebbe meglio impararla su un linguaccio funzionale(io ho imparato su schema, e anche io all'epoca lo odiavo...)
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 20:38   #9
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da 71104
che si converte in un algoritmo iterativo con estrema naturalezza e semplicità


prova questa porcheria ma non ti fidare troppo, l'ho scritta in 2 secondi senza manco provare
Codice:
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define F FunzioneTotalmenteImbecille

int FunzioneTotalmenteImbecille(int *Array, int Start, int End) {
    if (End == Start) {
        return Array[Start];
    }
    return MIN(F(Array, Start, Start + (End - Start) / 2),
        F(Array, Start + (End - Start) / 2 + 1, End));
}
concordo, e sono sinceramente contento per te che tu l'abbia capito: vuol dire che nonostante le assurde richieste dei professori, se gli studenti ci mettono del loro alla fine qualcosa in termini di preparazione la guadagnano lo stesso. intendiamoci, ovviamente sarebbe tutto più facile se i professori evitassero di andare controcorrente...

L'approccio divide et impera qua non ti serve, l'array non è ordinato e devi *comunque* passare in rassegna tutti gli elementi . Se fai un paio di conti vedrai che all'incirca fai lo stesso numero di confronti. A voler essere pignoli, in questo modo accedi "a saltoni" alla memoria, col probabile risultato di rallentare l'afflusso dei dati alla cpu (soprattutto se l'array è piu' grande della cache del processore).
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 20:47   #10
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da thebol
e vero, ma è l'unico modo per forzare gli studenti a provare la programmazione ricorsiva.

anche se sarebbe meglio impararla su un linguaccio funzionale(io ho imparato su schema, e anche io all'epoca lo odiavo...)
Concordo, una volta assimilata la ricorsione diventa piu' naturale e pure semplice da capire.
In questo caso pero' l'esempio non è dei migliori ([i]grazie[(i] anche alla scelta del C come linguaggio).
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2006, 21:50   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da marco.r

L'approccio divide et impera qua non ti serve, [...]
l'ha detto lui che serve, è una richiesta dell'esercizio
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 01:06   #12
il_luridone
Member
 
L'Avatar di il_luridone
 
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
io risolverei così
Codice:
int
minimo (int *input, int p, int r)
{
  int q;     /* mediano attorno il quale dividiamo l'array */

  if ((r - p) > 0)
    {
      q = floor ((r - p) / 2);
      return MIN (minimo (input, p, p + q), minimo (input, p + q + 1, r));
    }
  else
    return input[p];
}
input è l'array di interi, p e r sono gli indici del primo e dell'ultimo elemento. Per esempio, se hai un array con tre interi, hai p = 0 e r = 2.

Se r - p > 0 allora hai più di un elemento nell'array e hai bisogno di spezzare il problema: q è il mediano inferiore dell'array e le due parti vengono passate a due chiamate ricorsive della funzione.

Se r - p == 0 allora l'array ha un solo elemento, che è banalmente il minimo dell'array.

Quando le ricorsioni spezzettano i sottoproblemi fino ad arrivare ad array di un elemento, la ricorsione finisce e i numeri ritornati vengono confrontati dalla macro MIN
Codice:
#define     MIN(x,y)     ((x) < (y) ? (x) : (y))
che non è altro che un condizionale per selezionare il numero minore.

Questo è un semplice codice di test, se lo intitoli "min_ricorsivo.c" lo puoi compilare con "gcc -Wall -ansi -pedantic -lm -o min_ricorsivo min_ricorsivo.c"
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


#define     MIN(x,y)     ((x) < (y) ? (x) : (y))


int
minimo (int *input, int p, int r)
{
  int q;

  if ((r - p) > 0)
    {
      q = floor ((r - p) / 2);
      return MIN (minimo (input, p, p + q), minimo (input, p + q + 1, r));
    }
  else
    return input[p];
}


int
main (int argc, char **argv)
{
  int i;
  int *input;

  input = (int *) malloc ((argc - 1) * sizeof (int));
  if (input == NULL)
    {
      perror ("errore malloc");
      exit (1);
    }


  if (argc == 1)
    {
      printf ("uso: min_ricorsivo <numeri interi>\n");
      printf ("i numeri interi devono essere separati da spazi.\n");
      exit (1);
    }

  for (i = 1; i < argc; i++)
    {
      input [i-1] = strtol(argv[i], (char **)NULL, 10);
      printf ("%d ", input [i - 1]);
    }

  printf ("\n");

  printf ("min = %d\n", minimo(input, 0, argc - 2));

  return 0;
}
Metti qualche numero come argomento a linea di comando e dovrebbe sputare il minimo. Per capire bene cosa succede aiuta sicuramente disegnare l'array di input su un foglio ed eseguire il programma passo passo con un debugger, controllando tutti i valori delle variabili e aggiornando di conseguenza il disegno.

Spero vada bene, l'ora è quella che è
__________________
And the salad is frightful!
I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out.
il_luridone è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 09:37   #13
sars
Junior Member
 
Iscritto dal: May 2006
Messaggi: 5
Quote:
Originariamente inviato da white05
perché purtroppo quando le persone incompetenti chiedono di realizzare qualche cosa per dei corsi non si rendono conto che così non insegnano a programmare ma confondono solo le idee....



tail-recursive significa???
Significa che l'ultima istruzione della funzione e` la chiamata ricorsiva. Molti compilatori di linguaggi funzionali possono usarla per ottimizzare l'uso dello stack (non credo che ci siano compilatori c che lo fanno)

Quote:
Pensa che in realtà si dovrebbe creare una ricerca di minimo con ricorsione e approccio divide et impera...
assurdo da un punto di vista della logica della programmazione
Delirio puro.
(primo post: saluti a tutti!)
sars è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 09:52   #14
sars
Junior Member
 
Iscritto dal: May 2006
Messaggi: 5
Quote:
Originariamente inviato da marco.r
Concordo, una volta assimilata la ricorsione diventa piu' naturale e pure semplice da capire.
In questo caso pero' l'esempio non è dei migliori ([i]grazie[(i] anche alla scelta del C come linguaggio).
Comunque anche con un linguaggio funzionale nessuno userebbe mai la ricorsione per cercare il minimo in un vettore, in lisp:

Codice:
(reduce #'min array)
sars è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 11:12   #15
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da 71104
l'ha detto lui che serve, è una richiesta dell'esercizio
Chiedo scusa, non l'avevo capito
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 11:23   #16
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da sars
Comunque anche con un linguaggio funzionale nessuno userebbe mai la ricorsione per cercare il minimo in un vettore, in lisp:

Codice:
(reduce #'min array)
Sicuro, se non altro perchè abbiamo funzioni di piu' alto livello già pronte . Il mio discorso era che, volendo scriversela, di solito la versione ricorsiva riesce ad essere piu' elegante e chiara della corrispondente iterativa, ma in questo caso è il contrario.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 11:48   #17
sars
Junior Member
 
Iscritto dal: May 2006
Messaggi: 5
Quote:
Originariamente inviato da marco.r
Il mio discorso era che, volendo scriversela, di solito la versione ricorsiva riesce ad essere piu' elegante e chiara della corrispondente iterativa, ma in questo caso è il contrario.
Diciamo che dipende, certe cose sono piu` chiare con un loop, certe ricorsivamente.
sars è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 16:16   #18
il_luridone
Member
 
L'Avatar di il_luridone
 
Iscritto dal: Oct 2004
Città: Bologna
Messaggi: 50
A me non sembra tanto strano che la didattica insegni roba poco utile in pratica ma semplice concettualmente.

Capire un concetto nuovo come la ricorsione partendo da casi reali mi sembra controproducente. Una volta compreso il concetto grazie all'esempio banale e scolastico, si può procedere per gradi di difficoltà (come si fa sempre in ogni corso non solo informatico).

Poi sarà compito dello studente digerire il concetto elementare ed applicarlo ai casi veri.
__________________
And the salad is frightful!
I have an important message to deliver to all the cute people all over the world. If you're out there and you're cute, maybe you're beautiful. I just want to tell you something: there's more of us ugly mother-fuckers than you are, hey-y, so watch out.
il_luridone è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 18:06   #19
sars
Junior Member
 
Iscritto dal: May 2006
Messaggi: 5
Quote:
Originariamente inviato da il_luridone
A me non sembra tanto strano che la didattica insegni roba poco utile in pratica ma semplice concettualmente.

Capire un concetto nuovo come la ricorsione partendo da casi reali mi sembra controproducente. Una volta compreso il concetto grazie all'esempio banale e scolastico, si può procedere per gradi di difficoltà (come si fa sempre in ogni corso non solo informatico).

Poi sarà compito dello studente digerire il concetto elementare ed applicarlo ai casi veri.
E qual'e` lo scopo didattico di scrivere algoritmi inutilmente contorti?
sars è offline   Rispondi citando il messaggio o parte di esso
Old 28-05-2006, 19:36   #20
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da sars
E qual'e` lo scopo didattico di scrivere algoritmi inutilmente contorti?
imparare la sofisticata tecnica della contorsione, anche detta yoga informatico; aiuta a ritrovare il benessere interiore del tuo software: diurifica, vivifica, slarga le vene, fa ca@are bene.
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
Apple TV punta ai diritti USA dell'Open ...
Download pirata di Odissea: attenzione a...
Condivisione Schermo di macOS sotto atta...
Debutta Freelander, il nuovo marchio di ...
Le migliori offerte Amazon di oggi: Appl...
Ecco l'auto della discordia, Voyah Passi...
Virgin Galactic posticipa la ripresa dei...
Apple AirPods Pro 3 a 199€: ANC evoluto,...
Insta360 Flow Pro a 65€: il gimbal per i...
IONIQ 3, parte da Izmit la produzione de...
Per il cofondatore di Arm l'IA non &egra...
Nove CEO dell'AI, nessuno si salva: il m...
OpenAI ha sciolto il team che valutava i...
Dreame Aqua10 Ultra, super calo di prezz...
Microsoft ritira Mico: dal 18 agosto Cop...
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: 19:01.


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