Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

Funzioni Ricorsive [C]

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 :)

Re: Funzioni Ricorsive [C]

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

Re: Funzioni Ricorsive [C]

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( );
}

Re: Funzioni Ricorsive [C]

31/08/2020, 12:58

@fab-30: è in effetti più o meno come deve essere implementato.
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.