在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参数,但递归调用需要它。

因此,对于值为4的函数,只需要初始化result

我可以写一些初始化函数,比如:

def is_prime_mers_init(step):
    is_prime_mers(4, step, count_mersenne(step))

但也许在第一个函数中有一些python/general编程模式可以做到这一点?

编辑:对于所有好奇的人:)这是实现Lucas Lehmer检验并检查给定的Mersenne数是否为素数的函数http://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test-然而,我只阅读数学实现-所以这纯粹是我的代码解决方案。

step是的递归调用数

count_mersenne(step)给出了一些梅森数的值:2 ** step - 1,但我在count_mersenne(step)中使用了一些检查,因为搜索素数梅森数可能仅限于素数step值。

您可以为它们分配伪默认值,然后您可以决定是否更改它们,就像这个

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

最新更新