Podążam za książką Wprowadzenie do komputerów za pomocą języka Python, autor: Ljubomir Perkovic, i mam problem z jednym z przykładów w sekcji rekursji książki. Kod jest w następujący sposób:Używanie print() wewnątrz funkcji rekursywnych w Pythonie3
def pattern(n):
'prints the nth pattern'
if n == 0: # base case
print(0, end=' ')
else: #recursive step: n > 0
pattern(n-1) # print n-1st pattern
print(n, end=' ') # print n
pattern(n-1) # print n-1st pattern
, powiedzmy, pattern(1)
, wyjście powinno być 0 1 0
, i powinien on być wyświetlane poziomo. Podczas wywoływania funkcji pattern(1)
nic nie zostanie wydrukowane. Ale jeśli po tym następuje instrukcja print bez argumentów, wyniki są wyświetlane.
>>>pattern(1)
>>>print()
0 1 0
Jeśli usunąć end
argument print()
funkcji wewnątrz funkcji rekurencyjnej, uzyskać poprawny wynik (choć to wyświetla go w pionie):
>>> pattern(1)
0
1
0
To sprawia, że myślę, że sam kod rekurencyjne jest poprawny (plus potwierdziłem, że był on ze źródła podanego na stronie internetowej książki oraz w arkuszu erraty). Nie jestem jednak pewien, dlaczego instrukcja print
nie drukuje danych wyjściowych podczas uruchamiania funkcji, jeśli parametr end
jest uwzględniony. Każda pomoc będzie bardzo ceniona.
Ten problem może być IDE specyficzne. Wydaje się, że nie występuje przy użyciu Python3 uruchomionego na Ubuntu/gnome-terminal (lub w IPython + emacs). – unutbu