计算(n-1)的函数!,但有步骤。
def function1(n, step):
result = 1
for i in range(1, n, step):
result *= i
return result
不允许添加更多参数,并且需要使其递归。我已经试过了:
def function2(n, step):
if n < 0:
return 1
return n * function2(n-step, step)
但是,让我们说:
function2(6,3)
它不起作用,第一个功能会给我1 * 4
,第二个功能会给我6 * 3 * 1
我不知道如何使其与step参数一起使用。
编辑:更多示例:
First function
function1(13, 3) == 280
function1(11, 3) == 280
function1(6, 3) == 4
function1(11, 2) == 945
function1(8, 2) == 105
function1(4, 2) == 3
More sample:
function1(12, 3) == 280
function1(5, 2) == 3
function1(5, 3) == 4
Second function (same values):
function2(13, 3) == 3640
function2(11, 3) == 880
function2(6, 3) == 0
function2(11, 2) == 10395
function2(8, 2) == 0
function2(4, 2) == 0
Edit2:更多说明:函数计算(n-1)!,但有步骤。step参数只会“跳过”或“跳过”一些数字(例如:function1(12, 3)
应该1*4*7*10
像range()的step参数一样进行计算,因为它会在第一个函数中使用)
谢谢!
最明显的区别是,你正在构建range
从1开始计数达至n
通过step
,并在递归的例子中,你已开始在n
计数下来的step
。这将导致不同的数字相乘。
因为不要求您使用任何其他函数参数,所以我建议使用一个内部辅助函数loop
-
def fact (n, step):
def loop (m):
if m >= n:
return 1
else:
return m * loop(m + step)
return loop(1)
如果您不想使用上述辅助功能loop
,则必须使用复数模运算-
def fact (n, step):
if n % step != 1:
return fact(n + 1, step)
elif n < step:
return 1
else:
return (n - step) * fact(n - step, step)
无论您以哪种方式摇晃它,该问题的模数运算都是杂乱的-
def fact (n, step):
q = (n - 1) % step
if q:
return fact(n + step - q, step)
elif n < step:
return 1
else:
return (n - step) * fact(n - step, step)
一旦像“不使用其他参数”这样的学术约束消失了,您就可以以更熟悉的方式乘以升序级数-
def fact (n, step, m = 1):
if m >= n:
return 1
else:
return m * fact(n, step, m + step)
fact
上述所有变体都会产生相同的输出-
print(fact(13, 3) == 280) # True
print(fact(11, 3) == 280) # True
print(fact(6, 3) == 4) # True
print(fact(11, 2) == 945) # True
print(fact(8, 2) == 105) # True
print(fact(4, 2) == 3) # True
print(fact(5, 2) == 3) # True
print(fact(5, 3) == 4) # True
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句