Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C tìm UCLN bằng hàm không đệ quy

Đề 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