0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Tổng các Số Tự Nhiên - Khởi Đầu Với Thuật Toán trong Go

Đăng vào 6 tháng trước

• 4 phút đọc

Tổng các Số Tự Nhiên - Khởi Đầu Với Thuật Toán trong Go

Trong hành trình phỏng vấn kỹ thuật của mình, tôi đã nhận thấy có một sự thiếu hụt về các ví dụ Cấu trúc Dữ liệu và Thuật toán (DSA) dựa trên Go. Khi Go ngày càng trở nên phổ biến và tôi đã nghiên cứu nó một cách sâu rộng, tôi quyết định chuyển đổi loạt bài DSA của mình từ JavaScript/TypeScript sang Go. Cú pháp thanh lịch của Go khiến cho việc chuyển đổi này trở nên thú vị—nó giống như khám phá một thế giới hoàn toàn mới.

Hãy bắt đầu với một thuật toán rất cơ bản để khởi động: Tổng các Số Tự Nhiên. Cùng tôi khám phá thuật toán đơn giản nhưng hiệu quả này.

Lưu ý: Bài viết này giả định rằng bạn có kiến thức cơ bản về Go và đang chuẩn bị cho các buổi phỏng vấn xin việc.

Đề Bài Vấn Đề

Cho một số nguyên dương n, hãy trả về tổng của tất cả các số tự nhiên từ 1 đến n.

Phân tích đề bài, chúng ta có: một đầu vào (một số nguyên dương), logic yêu cầu (tổng tất cả các số tự nhiên), và một đầu ra (số nguyên kết quả từ tổng). Hãy sử dụng cấu trúc này để định nghĩa thuật toán của chúng ta.

Cách Giải Quyết

Nếu bạn đã đọc các bài viết trước đây của tôi về DSA, bạn sẽ biết tôi ưa thích một cách tiếp cận đơn giản: giải thích trước đề bài, sau đó là thuật toán để giải quyết nó, và cuối cùng là việc triển khai.

Bây giờ, hãy tiếp tục. Bước đầu tiên là xử lý đầu vào. Chúng ta cần xác nhận xem đó có phải là một số dương không vì đây là một ràng buộc trong đề bài. Đây là một xác nhận cơ bản: nếu số đầu vào (n) nhỏ hơn 0, điều đó có nghĩa là nó không phải là số dương, vì vậy chúng ta sẽ trả về 0.

go Copy
if n < 0 {
  return 0
}

Tiếp theo, khai báo một biến sum mà chúng ta sẽ tích lũy giá trị của mỗi số.

go Copy
sum := 0

Nhờ sự thanh lịch của Go, chúng ta có thể tạo một vòng lặp bằng cách sử dụng cú pháp range. Khi chúng ta khai báo một biến i để lặp qua khoảng n, chúng ta đang tạo ra một vòng lặp chạy từ 0 đến n-1.

go Copy
for i := range n {}

Điều quan trọng cần lưu ý là cú pháp này chỉ hoạt động với Go 1.22 trở lên. Với các phiên bản cũ hơn, bạn sẽ cần sử dụng vòng lặp for thông thường.

go Copy
for i := 0; i < n; i++ {}

Tiếp theo, thêm giá trị của lần lặp hiện tại cộng với 1 vào biến sum của chúng ta, vì vòng lặp bắt đầu từ 0.

go Copy
sum += i + 1

Khi vòng lặp kết thúc, bạn chỉ cần trả về tổng đã tích lũy.

go Copy
return sum;

Triển Khai Hoàn Chỉnh

Triển khai hoàn chỉnh của giải pháp chúng ta cho việc tính tổng các số tự nhiên được trình bày dưới đây. Khi xem xét triển khai này, hãy chú ý đến sự ngắn gọn nhưng vẫn dễ đọc của cú pháp Go:

go Copy
func sumNaturalNumbers(n int) int {
    if n < 0 {
        return 0
    }
    sum := 0
    for i := range n {
        sum += i + 1
    }
    return sum
}

Và voilà! Bạn vừa hoàn thành câu hỏi phỏng vấn kỹ thuật đầu tiên của mình bằng Go. Trong khi chúng ta chưa đề cập đến bất kỳ cấu trúc dữ liệu nào, ví dụ này phục vụ như một điểm khởi đầu tuyệt vời cho hành trình DSA của bạn với Go.

Những Suy Nghĩ Cuối Cùng

Mặc dù thuật toán này đơn giản, nhưng nó hiệu quả trong việc chứng minh khả năng của Go như một ngôn ngữ lập trình. Cú pháp thanh lịch và đặc điểm hiệu suất khiến Go trở nên hấp dẫn cho các cuộc phỏng vấn kỹ thuật và ứng dụng thực tế.

Có một câu nói trong nghệ thuật: "bạn cần phải biết các quy tắc để phá vỡ chúng." Tương tự, để xuất sắc trong các cuộc phỏng vấn kỹ thuật, bạn cần có nền tảng vững chắc. Cách tốt nhất là kết hợp một điểm khởi đầu rõ ràng (như thuật toán cơ bản này), một kế hoạch vững chắc để giải quyết các vấn đề phức tạp hơn, và kỷ luật liên tục trong thực hành. Tôi hy vọng ví dụ này sẽ giúp bạn trong cuộc phỏng vấn kỹ thuật tiếp theo và giúp bạn đạt được công việc mong muốn.

Bạn có thể tìm thấy mã cho bài viết này và các thuật toán khác trong kho GitHub của tôi: GitHub Repository

Tiếp tục học hỏi, và hẹn gặp lại bạn trong bài viết tiếp theo!

Ảnh thuộc về Susan Holt Simpson trên Unsplash.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào