递归功能 - 我被卡住了

时间:2015-03-11 03:20:31

标签: python python-3.x

原谅我,我是新手,但我想构建一个递归函数,它接受一个自然数,并返回从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)

最佳途径是实施计数器吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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))

您还需要再次递归调用该函数。