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

1 投票
1 回答
2828 浏览
提问于 2025-04-18 04:26

我写了一个简单的算法,用来检查梅森数是否是质数:

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

撰写回答