2015-03-11 8 views
-2

Простите меня, я новичок, но хочу построить рекурсивную функцию, которая принимает натуральное число и возвращает произведение всех натуральных чисел от 1 до заданного числа. Поэтому факториал (5) должен вернуть 120 (5 · 4 · 3 · 2 · 1 = 120). Однако, я думаю, что я просто застрял. Вот что у меня есть до сих пор:Рекурсивная функция - я застрял

def factorial(x): 
"""returns the product of all natural numbers from 1 up to the given number 

natural number -> natural number""" 
    if x <= 0: 
     return 1 
    else: 
     return x*(x-1) 

Будет ли лучший способ реализовать счетчик?

+0

Вам нужно вернуть значение, подобное этому 'return x * (x-1)'. Кроме того, 'if x <= 0:' вы должны вернуть '1'. В противном случае ваш ответ всегда будет равен нулю. – thefourtheye

+0

good catch @thefourtheye – holaprofesor

+1

см. Связанный с этим вопрос https://stackoverflow.com/questions/5136447/function-for-factorial-in-python – pigletfly

ответ

1

Сначала заявление в else должно вернуть значение, и поскольку это факториал, он должен быть x раз факториал одного менее x.

return x * factorial(x - 1) 

Базовый случай не может быть равно нулю, во-первых, потому что факториал любого числа меньше, чем ноль не определено и любое число раз ноль равно нулю, что делает весь функции бессмысленно.

Вы должны вместо этого использовать базовый случай:

if x <= 1: 
    return 1 

Так что ваша функция:

def factorial(x): 
    if x <= 1: 
     return 1 
    else: 
     return x * factorial(x - 1) 
+0

является факториальной встроенной функцией python? он не отображается с цветом в цикле for – holaprofesor

+0

Это часть библиотеки ['math'] (https://docs.python.org/2/library/math.html), да. Таким образом, вы должны «импортировать математику», а затем использовать 'math.factorial (x)' – javanut13

0
def factorial(x): 
"""returns the product of all natural numbers from 1 up to the given number 

natural number -> natural number""" 
    if x <= 0: 
     return 1 
    else: 
     return x*(factorial(x-1)) 

Вам также нужно рекурсивно вызвать функцию снова.

Смежные вопросы