Vì vậy, tôi đang viết một chương trình bằng Python để lấy số GCD của bất kỳ số lượng nào.Thuật toán Euclide (GCD) với nhiều số?
def GCD(numbers):
if numbers[-1] == 0:
return numbers[0]
# i'm stuck here, this is wrong
for i in range(len(numbers)-1):
print GCD([numbers[i+1], numbers[i] % numbers[i+1]])
print GCD(30, 40, 36)
Hàm này có danh sách các số. Điều này sẽ in 2. Tuy nhiên, tôi không hiểu cách sử dụng thuật toán đệ quy để nó có thể xử lý nhiều số. Ai đó có thể giải thích?
cập nhật, vẫn không làm việc:
def GCD(numbers):
if numbers[-1] == 0:
return numbers[0]
gcd = 0
for i in range(len(numbers)):
gcd = GCD([numbers[i+1], numbers[i] % numbers[i+1]])
gcdtemp = GCD([gcd, numbers[i+2]])
gcd = gcdtemp
return gcd
Ok, giải quyết nó
def GCD(a, b):
if b == 0:
return a
else:
return GCD(b, a % b)
và sau đó sử dụng giảm, như
reduce(GCD, (30, 40, 36))
vấn đề đầu tiên của bạn mà tôi nhận thấy là bạn sẽ cần sắp xếp danh sách sao cho phần tử nhỏ nhất là –
cuối cùng Không chắc chắn nếu trùng lặp hoặc chỉ liên quan: [Máy tính mẫu số chung lớn nhất trong python] (http: // stackoverflow. com/q/3640955/241039) –
chỉ fyi nếu bạn có thể làm điều đó với iterative thay vì recurse nó có lẽ sẽ nhanh hơn và có thể xử lý các giá trị lớn hơn ... đệ quy của độ sâu không xác định có thể là một chút sơ sài trong python –