|
|||||||
|
|
|
![]() |
|
|
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 11: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 11:00. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:42.




















