Funzioni Ricorsive [C]
Ciao a tutti, non so come risolvere questo esercizio, qualcuno mi aiuta?
io ho provato così ma non funziona
Grazie in anticipo
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

#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

Risposte
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
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
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):
Per esempio, questo codice inverte una sequenza con una funzione ricorsiva (ma non fa il filtro):
#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( ); }
@fab-30: è in effetti più o meno come deve essere implementato.