Đề bài
Tìm ước chung lớn nhất (UCLN/GCD) của hai số bằng hàm không đệ quy.
Thuật toán (Euclid lặp)
gcdnonR(i, j): rem = i - (i/j)*j // i % j if rem == 0 return j else return gcdnonR(j, rem) // Gọi đệ quy? Nhận xét: code mẫu dùng đệ quy, tên hàm gợi ý không đệ quy nhưng thực tế là đệ quy.
Lưu ý: Code mẫu dùng đệ quy. Hàm không đệ quy thực sự nên dùng vòng lặp while.
Chương trình C (theo code gốc)
#include <stdio.h>
#include <conio.h>
#include <math.h>
int gcdnonR(int i, int j) {
int rem = i - (i/j*j);
if (rem == 0)
return j;
else
return gcdnonR(j, rem); // Đệ quy
}
void main() {
int a, b;
printf("Nhập hai số: ");
scanf("%d%d", &a, &b);
printf("UCLN của %d", gcdnonR(a, b));
getch();
}
Kết quả
Nhập hai số: 10 30 UCLN của 10