在Python中的递归函数中初始化参数

时间:2014-04-27 07:23:44

标签: python python-2.7 recursion initialization

我写下了简单的算法来检查Mersenne数是否为素数:

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, cunt_mersenne(step))

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

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

step是递归调用的次数

cunt_mersenne(step)给出了一些梅森数的值:2 ** step - 1但是我在cunt_mersenne(step)中使用了一些检查,因为搜索素数梅森数可以限制为素数step

1 个答案:

答案 0 :(得分:2)

您可以为它们指定虚拟默认值,然后您可以决定是否更改它们,例如

def is_prime_mers(step, result = None, modulo = None):
    if result is None:
        result = 4                    # Default value
    if modulo is None:
        modulo = cunt_mersenne(step)  # Default value

或在一个衬里

def is_prime_mers(step, result = None, modulo = None):
    result = 4 if result is None else result
    modulo = cunt_mersenne(step) if modulo is None else modulo