Funzioni Ricorsive [C]

Messaggioda C_Ginger » 27/08/2020, 18:46

Ciao a tutti, non so come risolvere questo esercizio, qualcuno mi aiuta?

Scrivere una procedura ricorsiva che legga (senza memorizzarla) una sequenza di interi non negativi a0, a1, ..., ai, ..., terminata da −1 e che stampi, in ordine inverso, solo gli ai che sono preceduti da ai−1 tali che ai−1 < ai, escludendo −1. L’ultimo elemento da stampare il primo della sequenza. Se per esempio la sequenza in ingresso fosse: 3 2 8 7 −1 la stampa dovrebbe essere 8 3.


io ho provato così ma non funziona :(

Codice:
#include<stdio.h>

int ric(int n) {
   if(n>0) {
      scanf("%d", &n);
      if(ric(n-1)<n) {
         printf("%d ", n);
      }
      ric(n);
   }
}


int main() {
   int n;
   ric(n);
}


Grazie in anticipo :)
C_Ginger
Starting Member
Starting Member
 
Messaggio: 2 di 4
Iscritto il: 08/07/2020, 11:54

Re: Funzioni Ricorsive [C]

Messaggioda fab-30 » 30/08/2020, 11:23

Premetto che non programmo in C nè in C++
Ma concettualmente io avrei fatto una funzione ricorsiva che prende un numero in input (il numero precedente della sequenza $a_{i-1}$), chiede l'imput all'utente ($a_i$), verifica che non sia $-1$ (altrimenti ritorna), fa il confronto con $a_{i-1}$ e decide se stampare e poi richiama se stessa con $a_i$ come input.
La incapsulerei poi in un altra funzione non ricorsiva che si occupa di prendere il primo input dall'utente e chiamare quella ricorsiva con l'input preso ed infine, al ritorno dalla ricorsiva, stampa il primo numero
fab-30
 

Re: Funzioni Ricorsive [C]

Messaggioda vict85 » 31/08/2020, 09:17

La descrizione non è molto corretta: non puoi davvero invertire una sequenza senza memorizzarla da qualche parte. Quello che ti sta davvero chiedendo è di memorizzarla nello stack delle chiamate ricorsive.

Per esempio, questo codice inverte una sequenza con una funzione ricorsiva (ma non fa il filtro):
Codice:
#include <stdio.h>

void
rec( )
{
    int n;
    if ( 1 != scanf( "%d", &n ) )
        return;  // error in reading the number
    if ( n == -1 )
        return;
    rec( );
    printf( "%d ", n );
    return;
}

int
main( void )
{
    rec( );
}
vict85
Moderatore
Moderatore
 
Messaggio: 10185 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Funzioni Ricorsive [C]

Messaggioda apatriarca » 31/08/2020, 12:58

@fab-30: è in effetti più o meno come deve essere implementato.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5468 di 10438
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite