在Python中递归函数初始化参数
我写了一个简单的算法,用来检查梅森数是否是质数:
def is_prime_mers(result, step, modulo):
if result != 0:
if step == 0:
return False
result = result ** 2 - 2
if result >= modulo:
result %= modulo
return is_prime_mers(result, step - 1, modulo)
return True
通常情况下,当脚本调用这个函数时,我不需要提供 result
参数,但在递归调用时我需要它。
所以这个函数只需要把 result
初始化为4。
我可以写一个初始化的函数,比如:
def is_prime_mers_init(step):
is_prime_mers(4, step, count_mersenne(step))
不过,也许在第一个函数中,有什么Python或者通用编程的模式可以做到这一点?
编辑:对于所有好奇的人 :) 这是实现Lucas-Lehmer测试的函数,用来检查给定的梅森数是否是质数,详细信息可以查看这个链接 http://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test - 不过我只看了数学实现,所以这纯粹是我的代码解决方案。
step
是递归调用的次数。
count_mersenne(step)
给出某个梅森数的值:2 ** step - 1
,不过我在 count_mersenne(step)
中使用了一些检查,因为寻找质梅森数可以限制在质数的 step
值上。
1 个回答
2
你可以给它们设置一些假的默认值,然后再决定是否要更改这些值,就像这样
def is_prime_mers(step, result = None, modulo = None):
if result is None:
result = 4 # Default value
if modulo is None:
modulo = count_mersenne(step) # Default value
或者你也可以用一行代码来实现
def is_prime_mers(step, result = None, modulo = None):
result = 4 if result is None else result
modulo = count_mersenne(step) if modulo is None else modulo