Stampa Call Stack Tree of Recursive Python Function [chiuso]

1

Voglio scrivere un programma in Python che illustri la natura ad albero della ricorsione. Data una funzione ricorsiva (per esempio fibonacci (n)) dovrebbe esserci un modo per stampare la traccia di chiamata ad albero della funzione ricorsiva. Con la seguente funzione:

def fibonacci(n):  
  if n == 1 or n == 2: 
     return 1
   else:
     return fibonacci(n-1) + fibonacci(n-2)

La stampa per n = 5 potrebbe essere simile a:

                             fibo(5)    
               fibo(4)                    fibo(3)
       fibo(3)         fibo(2)      fibo(2)        fibo(1)
 fibo(2)      fibo(1)           

La soluzione dovrebbe essere il più "generale" possibile e non specifica per i numeri di Fibonacci in quanto voglio implementarla per ulteriori funzioni ricorsive.

    
posta user1767774 17.09.2015 - 11:40
fonte

2 risposte

5

Non puoi semplicemente modificare fibo per ottenere ciò che desideri. Ad esempio, l'ordine in cui si verificano le diverse chiamate a fibo non è quello in cui devi scrivere i loro argomenti alla console e, poiché non conosci la larghezza del tuo albero, non devi so fino a che punto è possibile iniziare con la radice.

Ciò che devi fare è raccogliere le chiamate e i loro argomenti in una struttura dati temporanea nel momento in cui si verificano, probabilmente anche in un albero, e quindi attraversare quella struttura dati dopo che la prima ricorsione è terminata.

    
risposta data 17.09.2015 - 12:00
fonte
-2

È possibile passare un altro argomento alla funzione ricorsiva che inizia da 0 e incrementa di 1 in ogni chiamata al fine di determinare la profondità dell'albero di ricorsione. Quindi puoi usare le pile per memorizzare le stringhe "function (x)" e infine stamparle in base alla profondità.

es. fibo (5,0) - > fibo (4,1), fibo (3,1) - > fibo (3,2), fibo (2,2), fibo (2,2), fibo (1,2) - > ...

    
risposta data 17.09.2015 - 12:59
fonte

Leggi altre domande sui tag