Menu
CoddyTech

Hàm đệ quy phần 2

Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 58 trên 78.

Mọi hàm đệ quy đều có hai phần giống nhau:

  1. Trường hợp cơ sở cho biết khi nào cần dừng.
  2. Bước đệ quy gọi hàm với đầu vào nhỏ hơn.

Giai thừa của n là n * (n - 1) * ... * 1, nên giai thừa của n bằng n nhân với giai thừa của n - 1:

func factorial(n: int) -> int:
	if n == 1: # trường hợp cơ sở
		return 1
	return n * factorial(n - 1) # bước đệ quy

factorial(5) gọi factorial(4), hàm này gọi factorial(3), cứ thế cho đến factorial(1), hàm này trả về 1. Khi quay ngược lại, mỗi lần gọi đều nhân kết quả: kết quả là 120.

Đầu vào nhỏ hơn không nhất thiết phải là một số nhỏ hơn. Một chuỗi ngắn hơn cũng được. Hàm này đảo ngược một chuỗi:

func reverse_text(text: String) -> String:
	if text.length() <= 1: # trường hợp cơ sở
		return text
	return reverse_text(text.substr(1)) + text[0]

text.substr(1) là chuỗi không có ký tự đầu tiên. Hàm đảo ngược chuỗi ngắn hơn đó rồi thêm ký tự đầu tiên vào cuối. Chuỗi có không hoặc một ký tự đã được đảo ngược, nên đó là trường hợp cơ sở.

print(reverse_text("hello"))
olleh
challenge icon

Thử thách

Dễ

Viết một hàm đệ quy có tên fibonacci, nhận một số nguyên dương n và trả về số Fibonacci thứ n:

  • fibonacci(1) là 0
  • fibonacci(2) là 1
  • với n > 2, fibonacci(n) là fibonacci(n - 1) + fibonacci(n - 2)

Ví dụ, fibonacci(6) trả về 5 (dãy số bắt đầu bằng 0, 1, 1, 2, 3, 5).

Các bài kiểm tra sẽ tự gọi fibonacci(). Đừng gọi hàm này và đừng in ra bất cứ thứ gì.

Tự làm thử

func fibonacci(n: int):
	# Viết code ở đây
	pass
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch GDScript online