Funzioni ricorsive

di il
2 risposte

Funzioni ricorsive

Salve, qualcuno può aiutarmi?
questo programma dopo aver superato la compilazione va in errore durante l'esecuzione. (Devo mantenere tutte le funzioni ricorsive).
Grazie in anticipo.
#include <iostream>
#include "ri.h"
using namespace std;
int main()
{
	int n,i,j,c,num;
	cout<<"Quanti numeri vuoi inserire?\n";
	cin>>n;
	int ing[n];
	int u[n];
	i=0;
	inserisci(ing, n, i);
	i=0;
	j=i+1;
	ordina(ing, n, i, j);
	cout<<ing[0];
	cout<<ing[1];
	cout<<ing[2];
	i=0;
	j=0;
	c=0;
	cout<<"\nChe numero vuoi cercare?\n";
	cin>>num;
	cerca(ing, u,n,i,j,c, num);
	if (c!=0) 
				{
					i=0;
					stampa (u,c,i);
				}
		else
				{
					cout<<"Non e' presente mi dispiace\n";
				}
system("pause");
return 0;
}


#include <iostream>
#include "ri.h"
using namespace std;

void inserisci(int v[], int n, int &i) 
										{
										if (i<n)
												{
													cout<<"\nDammi un numero\n";
													cin>>v[i];
													i++;
													inserisci(v,n,i);
												}
										}
//------------------------------------------------------------------------------------------------------------

void ordina(int v[], int n, int &i, int &j)
											{
											int a;
											if (i<n-1)
														{if (j<n) 
																		{
																		if (v[i]>v[j])
																						{
																							a=v[i];
																							v[i]=v[j];
																							v[j]=a;
																						}
																	    }			
														j++;
														ordina (v,n,i,j);
														}
														else
														{
														i++;
														j=i+1;
														ordina (v,n,i,j);
														}
											}	

//----------------------------------------------------------------------------------------------------------									

void cerca (const int ing[], int u[], int n, int &i, int &j, int &c, int num)
																				{
																					if (i<n)
																							{ 
																							if (num ==ing [i])
																											{
																												u[j] = i;
																												c=c+1;
																												j=j+1;
																												i=i+1;
																											cerca (ing, u, n, i, j, c, num);
																											}
																							else {
																								i=i+1;
																								cerca (ing, u, n, i, j, c, num);
																								}
																							}
																				}
																				
//---------------------------------------------------------------------------------------------------------------------

void stampa (const int u [], int &c, int &i)
	{
		if (i<c) 
			{
				cout << u[i];
				i++;
				stampa (u,c,i);
			}
	}														


void inserisci (int [], int, int &);
void ordina (int[], int, int &, int &);
void cerca (const int[], int[], int, int &, int &, int &, int);
void stampa (const int[], int &, int&);

2 Risposte

  • Re: Funzioni ricorsive

    Dovresti cercare di individuare con precisione il punto che causa l'errore. Metti dei cout di debug: è molto semplice! Se hai un dubbio riguardo una riga allora fai
    
    cout << "OK1" << endl;
    istruzione_sulla_quale_hai_dei_dubbi();
    cout << "OK2" << endl;
    
    Così capisci subito se quell'istruzione viene superata oppure no, rendi la vita più facile a noi e soprattutto fai un po' di pratica nel debugging del codice.
  • Re: Funzioni ricorsive

    Il problema è nel sottoprogramma ordina la prima volta che lo richiamo (all'interno dello stesso).
Devi accedere o registrarti per scrivere nel forum
2 risposte