欧几里德GCD函数返回类型None而不是in

2024-10-06 14:20:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我又回到了数学、算法和数据结构。今天,我花时间研究欧几里德算法和最大公约数

下面,我实现了一个函数来演示我学到的知识:

from math import floor

def euclidian(a: int, b: int):
    # a = b * q + r
    _q: int = int(floor(a / b))
    print(f"Quotient: {_q}")
    r: int = a % b
    print(f"Remainder: {r}")
    a = b
    print(f"A = B({a})")
    b = r
    print(f"B = R({b})")

    if a != 0 and b != 0:
        euclidian(a, b)

    # a = 0; gcd(0, b) = b
    elif a == 0:
        print(f"Returning value a({b}) | type: {type(b)}")
        return b

    # b = 0; gcd(a, 0) = a 
    elif b == 0:
        print(f"Returning value a({a}) | type: {type(a)}")
        return a

a: int = 270
b: int = 192
gcd: int = euclidian(a, b)
print(f"GCD type: {type(gcd)}")
print(f"GCD({a}, {b}) = {gcd}")

此递归函数经过几次迭代,最终返回以下结果:

Quotient: 6
Remainder: 0
A = B(6)
B = R(0)
Returning value a(6) | type: <class 'int'>

GCD type: <class 'NoneType'>
GCD(270, 192) = None

天越来越晚了,也许我需要一杯茶来唤醒自己。但是我似乎无法理解为什么变量gcdNone,而不是a的整数值。我错过了什么

谢谢


Tags: 算法returnvaluetypeclassintreturningprint
2条回答

当一个函数返回None时,通常意味着它在代码结束时没有执行return语句。在你的例子中,你有一堆if语句,我猜它们都不适用

您正在进行递归调用,但不返回值。i、 e

if a != 0 and b != 0:
    euclidian(a, b)

应该是

if a != 0 and b != 0:
    return euclidian(a, b)

你也没有其他人说过的基本情况

相关问题 更多 >