|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
[C++] Elemento massimo di un vettore ricorsivamente
Non capisco perchè non funziona questo programma che calcola ricorsivamente il massimo elemento di un vettore
Codice HTML:
#include <iostream> using namespace std; int massimo(int v[], int n, int& max){ if(n>0){ if(v[n-1]>max){ max=v[n-1]; return massimo(v,n,max);} else return massimo(v,n,max);} else return max;} main(){ int max=0; int i; cin >>i; int* v = new int v[i]; for(int j=0;j<i;j++){ cin >> v[i];} cout << massimo(v, i); system ("pause");} |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
cout << massimo(v, i); Codice:
cout << massimo(v, i, max); Codice:
if(v[n-1]>max){ ... return massimo(v,n,max);} else return massimo(v,n,max);} Codice:
int massimo(int v[], int n, int& max) { if(n>0) { if(v[n-1]>max) max=v[n-1]; return massimo(v,n-1,max); } return max; } Usando un pò di C++ per trovare il massimo di un vettore io farei così: Codice:
#include <algorithm> #include <vector> #include <iostream> class MaxVector { public: MaxVector() : max(0xFFFFFFFF) {} void operator() (int value) { if (value>max) max = value; } int GetMax() { return max; } private: int max; }; ... vector<int> v; ... int val = 0; cin >> val; v.push_back(val); ... MaxVector v = for_each(v.begin(), v.end(), MaxVector()); int max = v.GetMax(); ... Ultima modifica di tomminno : 12-10-2007 alle 10:36. |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
Codice HTML:
#include <iostream> using namespace std; int massimo(int v[], int n, int& max) { if(n>0) { if(v[n-1]>max) max=v[n-1]; return massimo(v,n-1,max); } return max; } main(){ int max=0; int i; cin >>i; int* v = new int v[i]; for(int j=0;j<i;j++){ cin >> v[i];} cout << massimo(v, i, max); system ("pause");} Non funziona lo stesso, mi da errore su questa riga int* v = new int v[i];21 expected `,' or `;' before "v" comq le classi ancora non le ho fatte |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
xubbax: di nuovo con questa indentazione ?
Ti invito ad usare una indentazione standard quando posti problemi in questa sezione. Lo capisci che così facendo costringi chi legge il tuo codice a copiarlo, metterlo in un editor e applicare l'indentazione prima di risponderti ? Fallo almeno come forma di rispetto per chi legge il tuo codice. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
guarda che non lo faccio mica apposta.. sono abituato cosi
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
E sei abituato male
![]()
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
e lo so, ma mica posso aspettare di identare benissimo per scrivere una cosa sul forum
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Per quelle 4 righe potevi fare lo sforzo
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Apr 2007
Messaggi: 381
|
ma per me quello è identato benissimo, non capisco cosa c'è che non va, per me è leggibilissimo
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Almeno prima di postare il codice qui passalo da un indentatore automatico ![]() |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Cosa c'è che non va nel tuo modo di indentare ormai te l'ho già detto diverse volte.
Ad ogni modo per calcolare il max in maniera ricorsiva farei così: Codice:
int getMax(int v[],int n){if(n>1){int prevMax=getMax(v,n-1);return (prevMax>v[n-1])?prevMax:v[n-1];}return v[0];} |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Sep 2007
Messaggi: 754
|
Non ci indurre in indentazione amen
![]()
__________________
http://www.tevigroup.it/ |
![]() |
![]() |
![]() |
#13 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Codice:
int * v = new int[i]; |
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 579
|
Spero bene che il problema sia un problema didattico...
Perchè risolvere un problema di complessità n con la ricorsione è come usare un transatlantico per attraversare un fiume... |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
Codice:
int max(int* v, int n) { if (n==1) return *v; return *v>(n=max(v+1,n-1))?*v:n; } Ultima modifica di Furla : 13-10-2007 alle 10:00. |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:51.