Danh mục: n) để tính giá trị x^n. mới nhất

88 Học Python – Viết hàm P(x,n) để tính giá trị x^n. mới nhất

Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python

Giới Thiệu

Hàm mũ P(x, n) tính giá trị của x lũy thừa n, tức là x^n. Bài viết này sẽ hướng dẫn ba cách viết hàm tính lũy thừa: sử dụng vòng lặp, đệ quy và thư viện có sẵn của Python.

Khuyến mãi đặc biệt thêm danh sách 10 bài tập nâng cao khả năng lập trình Python:

  1. Bài 81: Đếm số ký tự thường trong xâu bằng Python
  2. Bài 82: Tìm tên của một người trong chuỗi họ và tên bằng Python
  3. Bài 83 Tìm họ và chữ lót của một người từ chuỗi họ và tên bằng Python
  4. Bài 84: Tính chu vi và diện tích của tam giác có sử dụng hàm trong Python
  5. Bài 85: Viết hàm kiểm tra chia hết cho 5 trong Python
  6. Bài 86: Viết hàm tìm Ước Chung Lớn Nhất (UCLN) trong Python
  7. Bài 87: Viết hàm tính giai thừa n! trong Python
  8. Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python
  9. Bài 89: Vẽ hình chữ nhật bằng dấu * trong Python
  10. Bài 90: Sử dụng hàm lồng nhau trong Python

Cách Thực Hiện

Cách 1: Sử dụng vòng lặp (Cách thông thường)

  1. Khởi tạo biến kết quả result là 1.
  2. Dùng vòng lặp để nhân x với chính nó n lần.
  3. Trả về kết quả.

 

def tinh_luy_thua_vong_lap(x, n):

    result = 1

    for _ in range(n):

        result *= x

    return result

 

Cách 2: Sử dụng đệ quy (Tối ưu hơn với phân tích & chinh phục)

  1. Trường hợp cơ bản: Nếu n == 0, trả về 1.
  2. Trường hợp tổng quát: x^n = x * x^(n-1).
  3. Tối ưu hóa: Nếu n chẵn, ta có thể viết x^n = (x^(n/2))^2, giúp giảm số lần nhân.

 

def tinh_luy_thua_de_quy(x, n):

    if n == 0:

        return 1

    elif n % 2 == 0:

        half_power = tinh_luy_thua_de_quy(x, n // 2)

        return half_power * half_power

    else:

        return x * tinh_luy_thua_de_quy(x, n - 1)

 

Cách 3: Sử dụng thư viện math.pow() (Tối ưu nhất)

Python có hàm math.pow() giúp tính lũy thừa nhanh chóng và tối ưu.

 

import math
def tinh_luy_thua_math(x, n):
    return math.pow(x, n)

 

Chương Trình Hoàn Chỉnh

 

import math
def tinh_luy_thua_vong_lap(x, n):
    result = 1
    for _ in range(n):
        result *= x
    return result
def tinh_luy_thua_de_quy(x, n):
    if n == 0:
        return 1
    elif n % 2 == 0:
        half_power = tinh_luy_thua_de_quy(x, n // 2)
        return half_power * half_power
    else:
        return x * tinh_luy_thua_de_quy(x, n - 1)
def tinh_luy_thua_math(x, n):
    return math.pow(x, n)
# Nhập giá trị x và n
x = float(input("Nhập số thực x: "))
n = int(input("Nhập số nguyên dương n: "))
if n >= 0:
    print(f"{x}^{n} theo vòng lặp: {tinh_luy_thua_vong_lap(x, n)}")
    print(f"{x}^{n} theo đệ quy: {tinh_luy_thua_de_quy(x, n)}")
    print(f"{x}^{n} theo thư viện math: {tinh_luy_thua_math(x, n)}")
else:
    print("Vui lòng nhập số nguyên không âm.")

Ví Dụ Chạy Chương Trình

Nhập số thực x: 2

Nhập số nguyên dương n: 5

2^5 theo vòng lặp: 32

2^5 theo đệ quy: 32

2^5 theo thư viện math: 32.0

So Sánh Ba Cách

Phương phápƯu điểmNhược điểm
Vòng lặpĐơn giản, dễ hiểuChậm hơn so với cách tối ưu
Đệ quyTối ưu với thuật toán chia để trịCó thể gây lỗi tràn bộ nhớ nếu n quá lớn
math.pow()Nhanh chóng, tiện lợiTrả về kết quả kiểu float thay vì int

Kết Luận

Cả ba cách đều có ưu điểm riêng. Nếu muốn dễ hiểu, hãy dùng vòng lặp. Nếu cần tối ưu, hãy dùng đệ quy. Nếu muốn nhanh gọn, hãy dùng math.pow(). Chúc bạn học tốt Python!