Chuỗi Fibonacci trong Python sử dụng phạm vi

Chuỗi Fibonacci là một chuỗi bắt đầu bằng các phần tử 0 và 1 và tiếp tục với phần tử tiếp theo trong chuỗi bằng tổng của hai số trước đó

Chương trình Chuỗi Fibonacci

Trong ví dụ này, chúng tôi đọc một số từ người dùng, N làm đầu vào. N đại diện cho số phần tử của Chuỗi Fibonacci được tạo và in ra bàn điều khiển

Chương trình Python

N = int[input["Number of elements in Fibonacci Series, N, [N>=2] : "]]

#initialize the list with starting elements: 0, 1
fibonacciSeries = [0,1]

if N>2:
	for i in range[2, N]:
		#next elment in series = sum of its previous two numbers
		nextElement = fibonacciSeries[i-1] + fibonacciSeries[i-2]
		#append the element to the series
		fibonacciSeries.append[nextElement]

print[fibonacciSeries]

đầu ra

Chúng tôi lưu trữ chuỗi fibonacci trong Danh sách Python với các giá trị ban đầu là [0, 1]. Khi chúng tôi tính toán phần tử tiếp theo trong chuỗi, chúng tôi sẽ thêm phần tử đó vào danh sách. Chúng ta sẽ lặp lại quy trình này trong phạm vi [2, N], trong đó N được lấy từ người dùng đại diện cho số lượng phần tử được tạo trong Chuỗi Fibonacci

Tóm lược

Trong hướng dẫn Ví dụ về Python này, chúng ta đã học cách tạo chuỗi Fibonacci trong Python bằng vòng lặp for

Dãy Fibonacci là một dãy số nguyên khá nổi tiếng. Trình tự xuất hiện một cách tự nhiên trong nhiều vấn đề và có một định nghĩa đệ quy đẹp. Học cách tạo nó là một bước thiết yếu trong hành trình của lập trình viên thực dụng hướng tới việc làm chủ đệ quy. Trong hướng dẫn này, bạn sẽ tập trung tìm hiểu dãy Fibonacci là gì và cách tạo dãy bằng Python

Trong hướng dẫn này, bạn sẽ học cách

  • Tạo dãy Fibonacci bằng thuật toán đệ quy
  • Tối ưu hóa thuật toán Fibonacci đệ quy sử dụng ghi nhớ
  • Tạo dãy Fibonacci bằng thuật toán lặp

Để tận dụng tối đa hướng dẫn này, bạn nên biết kiến ​​thức cơ bản về , lập trình hướng đối tượng, câu lệnh điều kiện, hàm và cấu trúc dữ liệu cơ bản như danh sách, ngăn xếp và ngăn xếp. Làm quen với những khái niệm này sẽ giúp bạn hiểu rất nhiều về những khái niệm mới mà bạn sẽ khám phá trong hướng dẫn này

Hãy đi sâu vào ngay

Tải xuống miễn phí. Nhận một chương mẫu từ Python Basics. Giới thiệu thực tế về Python 3 để xem cách bạn có thể đi từ trình độ mới bắt đầu đến trình độ trung cấp trong Python với một chương trình giảng dạy hoàn chỉnh, cập nhật về Python 3. 8

Bắt đầu với dãy Fibonacci

Leonardo Fibonacci là một nhà toán học người Ý, người đã có thể nhanh chóng đưa ra câu trả lời cho câu hỏi này của Hoàng đế Frederick II của Swabia. “Một năm thu được bao nhiêu cặp thỏ, không kể số thỏ chết, giả sử mỗi cặp thỏ sinh thêm một cặp mỗi tháng và cặp vợ chồng trẻ nhất đã có thể sinh sản ở tháng thứ hai của cuộc đời?”

Câu trả lời là trình tự sau đây

Mẫu bắt đầu sau hai số đầu tiên, 0 và 1, trong đó mỗi số trong dãy luôn là tổng của hai số trước nó. Các nhà toán học Ấn Độ đã biết về dãy số này từ thế kỷ thứ sáu và Fibonacci đã tận dụng nó để tính toán sự tăng trưởng của quần thể thỏ

F[n] được dùng để chỉ số cặp thỏ có mặt trong tháng thứ n, do đó, dãy có thể được biểu thị như sau

Trong thuật ngữ toán học, bạn gọi đây là một quan hệ lặp lại, nghĩa là mỗi phần tử của chuỗi [ngoài 0 và 1] là một hàm của các phần tử trước đó

Ngoài ra còn có một phiên bản của dãy số mà hai số đầu tiên đều là 1, như vậy

Trong phiên bản thay thế này, F[0] vẫn hoàn toàn là 0, nhưng thay vào đó, bạn bắt đầu từ F[1] và F[2]. Thuật toán vẫn giữ nguyên vì bạn luôn tính tổng hai số trước đó để lấy số tiếp theo trong dãy

Với mục đích của hướng dẫn này, bạn sẽ sử dụng phiên bản của chuỗi bắt đầu bằng 0

Loại bỏ các quảng cáo

Kiểm tra đệ quy đằng sau dãy Fibonacci

Tạo dãy Fibonacci là một bài toán đệ quy kinh điển. Đệ quy là khi một hàm tham chiếu đến chính nó để chia nhỏ vấn đề mà nó đang cố giải quyết. Trong mọi lệnh gọi hàm, vấn đề trở nên nhỏ hơn cho đến khi nó đạt đến trường hợp cơ sở, sau đó, nó sẽ trả về kết quả cho từng người gọi trung gian cho đến khi nó trả lại kết quả cuối cùng cho người gọi ban đầu

Nếu bạn muốn tính số Fibonacci F[5], trước tiên, bạn cần tính các số trước của nó, F[4] và F[3]. Và để tính F[4] và F[3], bạn cần tính các tiền thân của chúng. Việc phân tích F[5] thành các bài toán con nhỏ hơn sẽ như thế này

Mỗi khi hàm Fibonacci được gọi, nó sẽ được chia thành hai bài toán con nhỏ hơn vì đó là cách bạn đã xác định quan hệ truy hồi. Khi nó đạt đến trường hợp cơ bản của F[0] hoặc F[1], cuối cùng nó có thể trả lại kết quả cho người gọi nó

Để tính số thứ năm trong dãy Fibonacci, bạn giải các bài toán nhỏ hơn nhưng giống hệt nhau cho đến khi đạt đến các trường hợp cơ bản, nơi bạn có thể bắt đầu trả về kết quả

Các bài toán con được tô màu trên biểu đồ này thể hiện các nghiệm lặp đi lặp lại cho cùng một bài toán. Nếu bạn đi sâu hơn vào cây, bạn sẽ tìm thấy nhiều giải pháp lặp đi lặp lại này. Điều này có nghĩa là để tạo ra một dãy Fibonacci theo cách đệ quy, bạn phải tính đi tính lại nhiều số trung gian. Đây là một trong những vấn đề cơ bản trong cách tiếp cận đệ quy đối với dãy Fibonacci

Tạo đệ quy dãy Fibonacci trong Python

Thuật toán tối thiểu và phổ biến nhất để tạo dãy Fibonacci yêu cầu bạn viết mã một hàm đệ quy tự gọi chính nó nhiều lần nếu cần cho đến khi tính được số Fibonacci mong muốn

>>>

>>> def fibonacci_of[n]:
..     if n in {0, 1}:  # Base case
..         return n
..     return fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
...

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

Bên trong fibonacci_of[], trước tiên bạn hãy kiểm tra vỏ máy. Sau đó, bạn trả về tổng các giá trị có được từ việc gọi hàm với hai giá trị trước đó là n. Việc hiểu danh sách ở cuối ví dụ tạo ra một dãy Fibonacci với mười lăm số đầu tiên

Chức năng này nhanh chóng rơi vào vấn đề lặp lại mà bạn đã thấy ở phần trên. Việc tính toán ngày càng đắt hơn khi n lớn hơn. Thời gian cần thiết tăng theo cấp số nhân vì hàm tính toán lặp đi lặp lại nhiều bài toán con giống hệt nhau

Ghi chú. Không thử chức năng này tại nhà với số lớn hơn 50. Tùy thuộc vào phần cứng của bạn, bạn có thể phải đợi một thời gian dài trước khi thấy kết quả—nếu bạn làm đến cùng

Để tính F[5], fibonacci_of[] phải gọi chính nó mười lăm lần. Để tính F[n], độ sâu tối đa của cây lệnh gọi là n và vì mỗi lệnh gọi hàm tạo ra hai lệnh gọi hàm bổ sung, nên độ phức tạp về thời gian của hàm đệ quy này là O[2n]

Hầu hết các cuộc gọi đó là dư thừa vì bạn đã tính toán kết quả của chúng. F[3] xuất hiện hai lần và F[2] xuất hiện ba lần. F[1] và F[0] là trường hợp cơ bản, vì vậy có thể gọi chúng nhiều lần. Bạn có thể muốn tránh sự lặp lại lãng phí này, đó là chủ đề của các phần sau

Tối ưu hóa thuật toán đệ quy cho dãy Fibonacci

Có ít nhất hai kỹ thuật bạn có thể sử dụng để làm cho thuật toán tạo dãy Fibonacci hiệu quả hơn—nói cách khác, để làm cho việc tính toán mất ít thời gian hơn. Những kỹ thuật này đảm bảo rằng bạn không phải tính đi tính lại cùng một giá trị, đó là điều khiến thuật toán ban đầu trở nên kém hiệu quả. Chúng được gọi là ghi nhớ và lặp lại

Ghi nhớ thuật toán đệ quy

Như bạn đã thấy trong đoạn mã trên, hàm Fibonacci tự gọi chính nó nhiều lần với cùng một đầu vào. Thay vì thực hiện cuộc gọi mới mỗi lần, bạn có thể lưu trữ kết quả của các cuộc gọi trước đó trong một thứ gì đó giống như bộ nhớ. Bạn có thể sử dụng danh sách Python để lưu trữ kết quả của các phép tính trước đó. Kỹ thuật này được gọi là ghi nhớ

Ghi nhớ tăng tốc độ thực thi các hàm đệ quy đắt tiền bằng cách lưu trữ các kết quả đã tính toán trước đó vào bộ đệm. Bằng cách này, khi cùng một đầu vào xảy ra lần nữa, hàm chỉ cần tra cứu kết quả tương ứng và trả về kết quả đó mà không phải chạy lại tính toán. Bạn có thể tham khảo các kết quả này dưới dạng lưu trữ hoặc ghi nhớ

Với tính năng ghi nhớ, bạn chỉ cần duyệt qua cây cuộc gọi có độ sâu n một lần sau khi trở về từ trường hợp cơ sở, khi bạn truy xuất tất cả các giá trị được tính toán trước đó được đánh dấu bằng màu vàng, F[2] và F[3], từ bộ đệm trước đó

Đường màu cam cho biết không có đầu vào nào của hàm Fibonacci được gọi nhiều lần. Điều này làm giảm đáng kể độ phức tạp về thời gian của thuật toán từ hàm mũ O[2n] thành tuyến tính O[n]

Ngay cả đối với các trường hợp cơ bản, bạn có thể thay thế việc gọi F[0] và F[1] bằng cách chỉ truy xuất các giá trị trực tiếp từ bộ đệm tại các chỉ số 0 và 1, vì vậy cuối cùng bạn chỉ gọi hàm sáu lần thay vì mười lăm lần

Đây là bản dịch có thể có của việc tối ưu hóa này sang mã Python

>>>

>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

Trong ví dụ này, bạn sử dụng từ điển Python để lưu trữ các số Fibonacci đã tính. Ban đầu,

>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
0 chứa các giá trị bắt đầu của dãy Fibonacci, 0 và 1. Bên trong hàm, trước tiên bạn kiểm tra xem số Fibonacci cho giá trị đầu vào hiện tại của n đã có trong
>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
0 chưa. Nếu vậy thì bạn trả lại số trong tầm tay

Nếu không có số Fibonacci cho giá trị hiện tại của n, thì bạn tính toán nó bằng cách gọi đệ quy fibonacci_of[] và cập nhật

>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
0. Bước cuối cùng là trả về số Fibonacci được yêu cầu

Loại bỏ các quảng cáo

Khám phá thuật toán lặp

Điều gì sẽ xảy ra nếu bạn thậm chí không phải gọi hàm Fibonacci đệ quy?

Bạn biết rằng hai số đầu tiên trong dãy là 0 và 1 và mỗi số tiếp theo trong dãy là tổng của hai số liền trước nó. Vì vậy, bạn chỉ cần tạo một vòng lặp cộng hai số trước đó,

>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
7 và
>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
8, để tìm số ở vị trí n trong dãy

Các số màu tím được in đậm trong sơ đồ bên dưới biểu thị các số mới cần được tính toán và thêm vào

>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
0 trong mỗi bước lặp

Để tính số Fibonacci tại vị trí n, bạn lưu hai số đầu tiên của dãy, 0 và 1, vào

>>> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
0. Sau đó, tính liên tiếp các số tiếp theo cho đến khi bạn có thể trả về
 1# fibonacci_class.py
 2
 3class Fibonacci:
 4    def __init__[self]:
 5        self.cache = [0, 1]
 6
 7    def __call__[self, n]:
 8        # Validate the value of n
 9        if not [isinstance[n, int] and n >= 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n >> cache = {0: 0, 1: 1}

>>> def fibonacci_of[n]:
..     if n in cache:  # Base case
..         return cache[n]
..     # Compute and cache the Fibonacci number
..     cache[n] = fibonacci_of[n - 1] + fibonacci_of[n - 2]  # Recursive case
..     return cache[n]

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
0 là một đối tượng hoàn toàn riêng biệt, vì vậy bạn không có quyền kiểm soát đối với nó

Dưới đây là mã triển khai giải pháp dựa trên lớp của bạn

 1# fibonacci_class.py
 2
 3class Fibonacci:
 4    def __init__[self]:
 5        self.cache = [0, 1]
 6
 7    def __call__[self, n]:
 8        # Validate the value of n
 9        if not [isinstance[n, int] and n >= 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n = 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n = 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n = 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n = 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n = 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n = 0]:
10            raise ValueError[f'Positive integer number expected, got "{n}"']
11
12        # Check for computed Fibonacci numbers
13        if n >> from fibonacci_class import Fibonacci

>>> fibonacci_of = Fibonacci[]

>>> fibonacci_of[5]
5
>>> fibonacci_of[6]
8
>>> fibonacci_of[7]
13

>>> [fibonacci_of[n] for n in range[15]]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
3

  • Dòng 13 định nghĩa một câu lệnh có điều kiện để kiểm tra các số Fibonacci đã được tính toán và có sẵn trong

     1# fibonacci_class.py
     2
     3class Fibonacci:
     4    def __init__[self]:
     5        self.cache = [0, 1]
     6
     7    def __call__[self, n]:
     8        # Validate the value of n
     9        if not [isinstance[n, int] and n >= 0]:
    10            raise ValueError[f'Positive integer number expected, got "{n}"']
    11
    12        # Check for computed Fibonacci numbers
    13        if n = 0]:
    10            raise ValueError[f'Positive integer number expected, got "{n}"']
    11
    12        # Check for computed Fibonacci numbers
    13        if n = 0]:
    10            raise ValueError[f'Positive integer number expected, got "{n}"']
    11
    12        # Check for computed Fibonacci numbers
    13        if n >> from fibonacci_class import Fibonacci
    
    >>> fibonacci_of = Fibonacci[]
    
    >>> fibonacci_of[5]
    5
    >>> fibonacci_of[6]
    8
    >>> fibonacci_of[7]
    13
    
    >>> [fibonacci_of[n] for n in range[15]]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
    
    8. Sau đó chạy mã này trong vỏ tương tác của bạn

    >>>

    >>> from fibonacci_class import Fibonacci
    
    >>> fibonacci_of = Fibonacci[]
    
    >>> fibonacci_of[5]
    5
    >>> fibonacci_of[6]
    8
    >>> fibonacci_of[7]
    13
    
    >>> [fibonacci_of[n] for n in range[15]]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
    

    Tại đây, bạn tạo và sau đó gọi một thể hiện của lớp

     1# fibonacci_class.py
     2
     3class Fibonacci:
     4    def __init__[self]:
     5        self.cache = [0, 1]
     6
     7    def __call__[self, n]:
     8        # Validate the value of n
     9        if not [isinstance[n, int] and n >= 0]:
    10            raise ValueError[f'Positive integer number expected, got "{n}"']
    11
    12        # Check for computed Fibonacci numbers
    13        if n = 0]:
     6        raise ValueError[f'Positive integer number expected, got "{n}"']
     7
     8    # Handle the base cases
     9    if n in {0, 1}:
    10        return n
    11
    12    previous, fib_number = 0, 1
    13    for _ in range[2, n + 1]:
    14        # Compute the next Fibonacci number, remember the previous one
    15        previous, fib_number = fib_number, previous + fib_number
    16
    17    return fib_number
    
    0. Cuộc gọi đầu tiên sử dụng
     1# fibonacci_func.py
     2
     3def fibonacci_of[n]:
     4    # Validate the value of n
     5    if not [isinstance[n, int] and n >= 0]:
     6        raise ValueError[f'Positive integer number expected, got "{n}"']
     7
     8    # Handle the base cases
     9    if n in {0, 1}:
    10        return n
    11
    12    previous, fib_number = 0, 1
    13    for _ in range[2, n + 1]:
    14        # Compute the next Fibonacci number, remember the previous one
    15        previous, fib_number = fib_number, previous + fib_number
    16
    17    return fib_number
    
    1 làm đối số và trả về
     1# fibonacci_func.py
     2
     3def fibonacci_of[n]:
     4    # Validate the value of n
     5    if not [isinstance[n, int] and n >= 0]:
     6        raise ValueError[f'Positive integer number expected, got "{n}"']
     7
     8    # Handle the base cases
     9    if n in {0, 1}:
    10        return n
    11
    12    previous, fib_number = 0, 1
    13    for _ in range[2, n + 1]:
    14        # Compute the next Fibonacci number, remember the previous one
    15        previous, fib_number = fib_number, previous + fib_number
    16
    17    return fib_number
    
    1, đây là số Fibonacci thứ sáu vì bạn đang sử dụng các chỉ số dựa trên số không

    Việc triển khai thuật toán dãy Fibonacci này khá hiệu quả. Khi bạn có một thể hiện của lớp, thuộc tính

     1# fibonacci_class.py
     2
     3class Fibonacci:
     4    def __init__[self]:
     5        self.cache = [0, 1]
     6
     7    def __call__[self, n]:
     8        # Validate the value of n
     9        if not [isinstance[n, int] and n >= 0]:
    10            raise ValueError[f'Positive integer number expected, got "{n}"']
    11
    12        # Check for computed Fibonacci numbers
    13        if n = 0]:
     6        raise ValueError[f'Positive integer number expected, got "{n}"']
     7
     8    # Handle the base cases
     9    if n in {0, 1}:
    10        return n
    11
    12    previous, fib_number = 0, 1
    13    for _ in range[2, n + 1]:
    14        # Compute the next Fibonacci number, remember the previous one
    15        previous, fib_number = fib_number, previous + fib_number
    16
    17    return fib_number
    

    Bây giờ, thay vì sử dụng đệ quy trong fibonacci_of[], bạn đang sử dụng phép lặp. Việc triển khai thuật toán dãy Fibonacci này chạy trong thời gian tuyến tính O[n]. Đây là một sự cố của mã

    • Dòng 3 định nghĩa fibonacci_of[], lấy một số nguyên dương, n, làm đối số

    • Dòng 5 và 6 thực hiện xác thực thông thường của n

    • Dòng 9 và 10 xử lý các trường hợp cơ sở trong đó n là 0 hoặc 1

    • Dòng 12 định nghĩa hai biến cục bộ,

       1# fibonacci_func.py
       2
       3def fibonacci_of[n]:
       4    # Validate the value of n
       5    if not [isinstance[n, int] and n >= 0]:
       6        raise ValueError[f'Positive integer number expected, got "{n}"']
       7
       8    # Handle the base cases
       9    if n in {0, 1}:
      10        return n
      11
      12    previous, fib_number = 0, 1
      13    for _ in range[2, n + 1]:
      14        # Compute the next Fibonacci number, remember the previous one
      15        previous, fib_number = fib_number, previous + fib_number
      16
      17    return fib_number
      
      9 và
      >>> from fibonacci_func import fibonacci_of
      
      >>> fibonacci_of[5]
      5
      >>> fibonacci_of[6]
      8
      >>> fibonacci_of[7]
      13
      
      >>> [fibonacci_of[n] for n in range[15]]
      [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
      
      0, và khởi tạo chúng với hai số đầu tiên trong dãy Fibonacci

    • Dòng 13 bắt đầu một vòng lặp

      >>> from fibonacci_func import fibonacci_of
      
      >>> fibonacci_of[5]
      5
      >>> fibonacci_of[6]
      8
      >>> fibonacci_of[7]
      13
      
      >>> [fibonacci_of[n] for n in range[15]]
      [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
      
      1 lặp từ
      >>> from fibonacci_func import fibonacci_of
      
      >>> fibonacci_of[5]
      5
      >>> fibonacci_of[6]
      8
      >>> fibonacci_of[7]
      13
      
      >>> [fibonacci_of[n] for n in range[15]]
      [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
      
      2 đến
      >>> from fibonacci_func import fibonacci_of
      
      >>> fibonacci_of[5]
      5
      >>> fibonacci_of[6]
      8
      >>> fibonacci_of[7]
      13
      
      >>> [fibonacci_of[n] for n in range[15]]
      [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
      
      3. Vòng lặp sử dụng dấu gạch dưới [______32_______4] cho biến vòng lặp vì nó là biến loại bỏ và bạn sẽ không sử dụng giá trị này trong mã

    • Dòng 15 tính toán số Fibonacci tiếp theo trong dãy và ghi nhớ số trước đó

    • Dòng 17 trả về số Fibonacci được yêu cầu

    Để dùng thử mã này, hãy quay lại phiên tương tác của bạn và chạy mã sau

    >>>

    >>> from fibonacci_func import fibonacci_of
    
    >>> fibonacci_of[5]
    5
    >>> fibonacci_of[6]
    8
    >>> fibonacci_of[7]
    13
    
    >>> [fibonacci_of[n] for n in range[15]]
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
    

    Việc triển khai fibonacci_of[] này khá tối thiểu. Nó sử dụng tính năng giải nén lặp lại để tính toán các số Fibonacci trong các vòng lặp, điều này khá hiệu quả về mặt bộ nhớ. Tuy nhiên, mỗi khi bạn gọi hàm với một giá trị khác là n, nó phải tính toán lại chuỗi đó một lần nữa. Để khắc phục điều này, bạn có thể sử dụng và làm cho chức năng của mình ghi nhớ các giá trị đã được tính toán giữa các lần gọi. Đi trước và cung cấp cho nó một thử

  • Phần kết luận

    Dãy Fibonacci có thể giúp bạn hiểu rõ hơn về đệ quy. Trong hướng dẫn này, bạn đã học dãy Fibonacci là gì. Bạn cũng đã tìm hiểu về một số thuật toán phổ biến để tạo chuỗi và cách dịch chúng sang mã Python

    Dãy Fibonacci có thể là một bàn đạp tuyệt vời và điểm khởi đầu để bước vào thế giới đệ quy, đây là một kỹ năng cơ bản cần có của một lập trình viên

    Trong hướng dẫn này, bạn đã học cách

    • Tạo dãy Fibonacci bằng thuật toán đệ quy
    • Tối ưu hóa thuật toán Fibonacci đệ quy của bạn bằng cách sử dụng tính năng ghi nhớ
    • Tạo dãy Fibonacci bằng thuật toán lặp

    Bạn cũng đã hình dung thuật toán đệ quy được ghi nhớ để hiểu rõ hơn về cách nó hoạt động đằng sau hậu trường. Để làm điều đó, bạn đã sử dụng sơ đồ ngăn xếp cuộc gọi

    Khi bạn nắm vững các khái niệm trong hướng dẫn này, kỹ năng lập trình Python của bạn sẽ được cải thiện cùng với tư duy thuật toán đệ quy của bạn

    Đánh dấu là đã hoàn thành

    Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Khám phá dãy Fibonacci bằng Python

    🐍 Thủ thuật Python 💌

    Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

    Gửi cho tôi thủ thuật Python »

    Giới thiệu về Mandy Wong

    Mandy là một Pythonista vừa chớm nở muốn chia sẻ tình yêu và kiến ​​thức của mình về Python và công nghệ phần mềm với thế giới. Cô ấy cũng là một TinyML + Kỹ sư dữ liệu trong đào tạo, một Muley và một vận động viên chơi gôn cạnh tranh hàng đầu bán thời gian đầy tham vọng

    » Thông tin thêm về Mandy

    Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

    Aldren

    David

    Geir Arne

    Joanna

    Gia-cốp

    leodanis

    Sadie

    Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

    Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonista chuyên gia

    Nâng cao kỹ năng Python của bạn »

    Chuyên gia Kỹ năng Python trong thế giới thực
    Với quyền truy cập không giới hạn vào Python thực

    Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

    Nâng cao kỹ năng Python của bạn »

    Bạn nghĩ sao?

    Đánh giá bài viết này

    Tweet Chia sẻ Chia sẻ Email

    Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

    Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

    Làm cách nào để vẽ chuỗi Fibonacci bằng Python?

    Chúng tôi khởi tạo thuật ngữ đầu tiên thành 0 và thuật ngữ thứ hai thành 1. Nếu số lượng các phần tử nhiều hơn 2, chúng ta sử dụng vòng lặp while để tìm phần tử tiếp theo trong dãy bằng cách cộng hai phần tử trước đó. Sau đó, chúng tôi trao đổi các biến [cập nhật nó] và tiếp tục quá trình

    Đầu ra của Fibonacci 0 1 1 2 3 5 8 13 21 sau đây là gì?

    Dãy Fibonacci là dãy số. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34. Trong chuỗi này, số tiếp theo được tìm thấy bằng cách cộng hai số trước nó. Do đó, số hạng tiếp theo trong chuỗi là 8 + 13 = 21 .

    Công thức của dãy Fibonacci Python là gì?

    Về mặt toán học, Dãy Fibonacci được biểu diễn bằng công thức này. F[n] = F[n-1] + F[n-2] , trong đó n > 1. Chúng ta có thể sử dụng chuỗi này để tìm bất kỳ số Fibonacci thứ n nào. Chuỗi hấp dẫn này được liên kết rộng rãi với nhà toán học Leonardo Pisano, còn được gọi là Fibonacci.

    Chủ Đề