2015-09-23 3 views
1

Я сделал факториал с использованием хвостовой рекурсии, то возвращается "нет" - почемуПочему рекурсия хвоста факториальных возвратов нет?

def fact(n, k): 
    print "n = %d k = %d" % (n,k) 
    if n == 1: 
     print "k final = ", k 
     return k 

    else: 
#  print n 
     print k 
     fact(n-1, k*(n-1)) 

a =(fact(4, 4)) 
print a 
+2

Вы ничего не возвращаете в предложении 'else:'. – Barmar

+1

Вопрос, связанный с рекурсией в Python, сделает лучший дубликат. – chepner

+0

@chepner Это тот же шаблон почти на всех языках. Исключение составляют такие языки, как Lisp, где последнее выражение в функции автоматически возвращается. Поэтому я не собирал аналогичные вопросы для каждого языка. – Barmar

ответ

1

Вы не вернулись значением в else п -

else: 
    fact(n-1, k*(n-1)) 

Это следует читать

else: 
    return fact(n-1, k*(n-1)) 
+0

дает правильный ответ - но у меня есть ответ k в условии if - я думал, что он вернет k - почему бы и нет? – user5331677

+0

@ user5331677 Да, каждый раз, когда вы вызываете его с помощью 'n == 1', он будет работать. Для '2' он будет возвращаться к' 1', который возвращает 'k' первому вызывающему, который отбрасывает возвращаемое значение и возвращает None. Для 3 исходный вызывающий объект получает None, который он игнорирует, но он сам возвращает None в конце. Каждое положение хвоста должно что-то возвращать, чтобы оно работало, а не только первое. – Sylwester

+0

@ Sylwester - спасибо – user5331677