Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di Tallid
    Registrato dal
    Jan 2009
    Messaggi
    76

    Ricorsione c

    Scrivere una procedura ricorsiva che, dato un intero n produca sullo standard output 2*n righe di stelline che formino un triangolo isoscele con base verticale. Ad esempio, per n=5, la procedura produrra' nello schermo:

    *
    **
    ***
    ****
    *****
    ****
    ***
    **
    *
    per ora sono riuscito a scrivere solo il seguente codice

    codice:
    void stampaTriangoloRec(int n){
          if(n==0){
                   printf("\n");
                   return;
          }      
          else{
               stampaTriangoloRec(n-1);                      
               int i=0;
               while(i<n){
                     printf("*");
                     i++;
               }           
               printf("\n");                      
           }       
    }
    che per n=5 produce l'output

    *
    **
    ***
    ****
    *****

    qualcuno può darmi qualche consiglio per risolvere l'esercizio? grazie

  2. #2
    mh, non sono certo che funzioni e di certo non è ottimizzata però una cosa del genere dovrebbe andare

    codice:
    void ricorri(int i, int cresci, int max){
    
    	int j;
    	
    	if( (i==0)){
    		return;
    	}
    
    	if( (i==max) ){
    		cresci = 0;
    	}
    
    
    
    	for(j=1; j<=i; j++){
    		printf("*");
    	}
    	printf("\n");
    	
    	if(cresci == 1) i++;
    	else i--;
    
    	ricorri(i, cresci, max);
    
    }
    alla prima chiamata il primo parametro va settato ad 1, il secondo idem (in realtà è un boolean) e il terzo è il tuo n
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

  3. #3
    Utente di HTML.it L'avatar di Tallid
    Registrato dal
    Jan 2009
    Messaggi
    76
    ok quindi secondo te è impossibile risolvere il problema usando meno di 3 parametri per la funzione?
    Te lo chiedo perchè nel testo non specificano la firma.

  4. #4
    beh due ci sono per forza:
    - il numero n di stelline massime
    - il numero i che deve stampare la singola chiamata ricorsiva
    a meno di questi due non puoi fare

    mmmmh, forse una cosa del genere funziona (A patto di aggiungere un altra variabile locale)

    codice:
    void ricorri2(int i, int max){
    
    	int j, tmp;
    	
    
    	if( (i== 2 * max) ){
    		return;
    	}
    
    	if(i>max) tmp = (max*2) - i;
    	else tmp = i;
    
    	for(j=1; j<=tmp; j++){
    		printf("*");
    	}
    	printf("\n");
    	
    	i++;
    	ricorri2(i, max);
    
    }
    all that you need:
    http://www.cplusplus.com/reference/clibrary/

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.