用python尝试编写一个递归函数mygcd实现辗转相除的算法,并作相关测试
时间: 2024-05-04 17:17:25 浏览: 119
好的,我可以回答您的问题。以下是递归函数mygcd的Python实现:
```python
def mygcd(a, b):
if b == 0:
return a
else:
return mygcd(b, a % b)
```
该函数使用辗转相除的算法来计算两个数的最大公约数。当其中一个数为0时,返回另一个非0数作为最大公约数。否则,将两个数的余数作为新的参数递归调用函数,直到其中一个数为0。
以下是测试函数的实现:
```python
def test_mygcd():
assert mygcd(60, 48) == 12
assert mygcd(354, 78) == 6
assert mygcd(17, 23) == 1
assert mygcd(0, 5) == 5
assert mygcd(28, 0) == 28
assert mygcd(0, 0) == 0
print("所有测试通过!")
test_mygcd()
```
该函数调用mygcd函数计算多对数的最大公约数,并使用assert语句比较结果与预期值是否相同。如果所有测试都成功,则输出“All tests passed!”。
相关问题
用Python编写:编写函数,用欧几里得算法(辗转相除法)求两个数中的最大公约数。(不要用递归)
```python
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
```
注:欧几里得算法的原理是,两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。不断用较小数和余数替换原来的两个数,直到较小数为0,此时较大数即为最大公约数。
用python编写函数,用欧几里得算法(辗转相除法)求两个数中的最大公约数。(不要用递归)
def gcd(a, b):
while b != 0:
temp = b
b = a % b
a = temp
return a
# 测试
print(gcd(12, 18)) # 6
print(gcd(24, 36)) # 12
print(gcd(17, 23)) # 1
阅读全文