Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเรียกซ้ำของ Python:A Guide

วิธีใช้การเรียกซ้ำของ Python

การเรียกซ้ำของ Python เป็นหัวข้อที่น่ากลัวสำหรับผู้เริ่มต้น มาปัดเป่าตำนานที่ว่าการเรียกซ้ำนั้นยากด้วยการกำหนดมัน การเรียกซ้ำเป็นวิธีการเขียนโปรแกรมที่ฟังก์ชันเรียกตัวเอง

ฟังดูง่ายใช่มั้ย เมื่อคุณเข้าใจแล้ว การเรียกซ้ำไม่ใช่แนวคิดที่ยาก

ในบทช่วยสอน Python นี้ เราจะพูดถึงการเรียกซ้ำและวิธีการทำงาน เราจะอธิบายตัวอย่างการเรียกซ้ำโดยใช้ฟังก์ชันแฟกทอเรียลเพื่อช่วยคุณในการเริ่มต้นใช้วิธีการเขียนโปรแกรมนี้

การเรียกซ้ำคืออะไร

การเรียกซ้ำเป็นที่ที่คุณกำหนดบางสิ่งบางอย่างในแง่ของตัวเอง

ฟังก์ชันแบบเรียกซ้ำช่วยแก้ปัญหาด้วยการเรียกตัวเองซ้ำอีกครั้ง ลักษณะการทำงานนี้ได้รับการสนับสนุนในภาษาการเขียนโปรแกรมหลักส่วนใหญ่ เช่น Python พวกเขาเป็นส่วนสำคัญของวิทยาการคอมพิวเตอร์และวิทยาศาสตร์ข้อมูล

การเรียกซ้ำมีประโยชน์เมื่อสามารถค้นหาวิธีแก้ไขปัญหาได้โดยแยกย่อยเป็นปัญหาเล็กๆ ซึ่งทั้งหมดใช้สูตรเดียวกัน ปัญหาประเภทนี้มักเรียกว่า "อัลกอริทึมแบบเรียกซ้ำ" กุญแจสำคัญในการแก้ปัญหาอยู่ในชื่อ!

วนซ้ำกับวนซ้ำ

มีสองวิธีในการแก้ปัญหาอัลกอริทึม:วนซ้ำหรือวนซ้ำ

วิธีแก้ปัญหาแบบวนซ้ำสำหรับอัลกอริธึมถือเป็น "ทรงพลังแต่น่าเกลียด" พวกเขาทำงานให้เสร็จลุล่วง แต่พวกเขาไม่ได้ทำในลักษณะที่หรูหราที่สุดอย่างแน่นอน เพื่อให้เข้าใจอัลกอริธึมแบบเรียกซ้ำได้อย่างถูกต้อง เราต้องดูที่ฟังก์ชันการวนซ้ำ

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

ฟังก์ชันวนซ้ำเป็นฟังก์ชันที่แก้ปัญหาโดยใช้ลูป มันจะรันโค้ดภายในลูปจนกว่าลูปนั้นจะสมบูรณ์ ฟังก์ชันแบบเรียกซ้ำคือฟังก์ชันที่แบ่งปัญหาออกเป็นส่วนเล็กๆ และแก้ปัญหาแต่ละส่วนด้วยการเรียกตัวเอง

แฟกทอเรียล:ตัวอย่างซ้ำ

แฟกทอเรียลเป็นวิธีที่ดีในการแสดงการเรียกซ้ำและการคิดแบบวนซ้ำ ในทางคณิตศาสตร์ แฟกทอเรียลคือผลรวมของตัวเลขและทุกจำนวนก่อนที่จะคูณกัน

แฟกทอเรียลของ 5 เท่ากับ 5 * 4 * 3 * 2 * 1 แฟคทอเรียลของ 2 เท่ากับ 2 * 1

ในการคำนวณแฟกทอเรียล เราสามารถเขียนฟังก์ชันวนซ้ำได้:

def factorial(number):
	total = 1
	for n in range(1, number + 1):
		total = total * n
	return total

ฟังก์ชันนี้ใช้ for loop เพื่อวนซ้ำตัวเลขทั้งหมดในช่วง 1 และจำนวนที่เราระบุบวก 1 สำหรับการวนซ้ำแต่ละครั้ง จำนวนที่วนซ้ำซ้ำจะถูกคูณด้วยผลรวม เรียกฟังก์ชันของเราเพื่อค้นหาแฟกทอเรียล:

answer = factorial(4)
print(answer)

รหัสของเราส่งคืน:24. ในการมาถึงโซลูชันนี้ รหัสของเราทำงาน:

  • 1 * 1 =1
  • 2 * 2 =4
  • 4 * 3 =8
  • 8 * 4 =24

อย่างที่คุณเห็น รหัสของเราคูณ 4 ด้วยจำนวนที่น้อยกว่านั้นและตัวมันเอง

รหัสนี้ใช้งานได้ ข้อเสียอย่างเดียวคือมันไม่หรูหราเท่าที่ควร นั่นคือจุดที่ฟังก์ชันแบบเรียกซ้ำมีประโยชน์

แฟกทอเรียล:ตัวอย่างการเรียกซ้ำ

ลองเขียนฟังก์ชันแบบเรียกซ้ำที่คำนวณแฟกทอเรียล เปิดไฟล์ Python ใหม่แล้ววางในรหัสต่อไปนี้:

def factorial(number):
	if number == 1:
		return 1
	else:
		return (number * factorial(number - 1))

รหัสนี้ใช้วิธีเรียกซ้ำ เมื่อเรียกใช้ฟังก์ชันนี้ คำสั่ง "if" จะถูกดำเนินการ คำสั่งนี้จะตรวจสอบว่าจำนวนที่ส่งไปยังฟังก์ชันเท่ากับ 1 หรือไม่ หากเป็น ฟังก์ชันของเราจะคืนค่า 1 มิฉะนั้น แฟกทอเรียลของตัวเลขของเราจะถูกคำนวณ

การคำนวณนี้ทำงานโดยการคูณจำนวนที่ส่งไปยังฟังก์ชันด้วยแฟกทอเรียลของตัวเลขก่อนหน้า ฟังก์ชันนี้ถูกเรียกซ้ำแล้วซ้ำเล่าจนกระทั่ง “number” เท่ากับ 1 ทุกครั้งที่มีการเรียกใช้ฟังก์ชัน ค่าของ “number” จะลดลง 1

มาลองใช้โค้ดของเรากับเลข 4 กัน

answer = factorial(4)
print(answer)

คำตอบ 24 ถูกส่งกลับ คำตอบของเราถูกต้อง มันเหมือนกับตัวอย่างสุดท้ายของเรา เราพบวิธีแก้ไขปัญหานี้แบบวนซ้ำแทนที่จะวนซ้ำ

คุณยังต้องการความช่วยเหลืออีกเล็กน้อยหรือไม่? มาดูอีกตัวอย่างหนึ่งของการเรียกซ้ำ

การเรียกซ้ำด้วยลำดับฟีโบนักชี

ลำดับฟีโบนักชีเป็นลำดับทางคณิตศาสตร์ โดยที่ตัวเลขแต่ละตัวเป็นผลรวมของตัวเลขสองตัวก่อนหน้า ลำดับนี้เริ่มต้นด้วย:0, 1, 1, 2, 3, 5, 8, 13 และอื่นๆ

ลำดับนี้บวกตัวเลขสองตัวเพื่อค้นหาตัวเลขถัดไป ทำให้เหมาะสำหรับการเรียกซ้ำ

เปิดไฟล์ Python แล้ววางในรหัสนี้:

def fibonacci(number):
	if number <= 1:
		return number
	else:
		return(fibonacci(number - 1) + fibonacci(number - 2))

รหัสนี้จะคำนวณผลรวมของตัวเลขสองตัวก่อนหน้าในรายการ ตราบใดที่ "ตัวเลข" มากกว่า 1 มิฉะนั้น "หมายเลขจะถูกส่งคืน" มาเรียกฟังก์ชันของเรากัน:

executions = 5

print("Fibonacci Sequence:")
for number in range(executions):
	print(fibonacci(number))

ตัวแปรการดำเนินการติดตามจำนวนตัวเลขในลำดับฟีโบนักชีที่เราต้องการคำนวณ เราใช้สิ่งนี้เพื่อสร้าง for loop ซึ่งเรียก fibonacci() . ของเรา ฟังก์ชันสำหรับแต่ละตัวเลขในช่วง 1 และค่าของ "การดำเนินการ"

ก่อนที่ for loop ของเราจะเริ่ม เราพิมพ์ “Fibonacci Sequence:” ไปที่คอนโซล ในตัวอย่างนี้ ลูป "for" ของเราดำเนินการ:

fibonacci(1)
fibonacci(2)
fibonacci(3)
fibonacci(4)
fibonacci(5)

มารันโค้ดของเรากันและดูว่าเกิดอะไรขึ้น:

Fibonacci Sequence:
0
1
1
2
3

รหัสของเราคำนวณตัวเลขห้าตัวแรกในลำดับฟีโบนักชี เราสามารถคำนวณตัวเลขได้มากขึ้นโดยการเพิ่มมูลค่าของ “การดำเนินการ”

ความลึกของการเรียกซ้ำและเงื่อนไขพื้นฐาน

ฟังก์ชันแบบเรียกซ้ำต้องมีเงื่อนไขพื้นฐาน นี่เป็นเงื่อนไขที่หยุดการเรียกซ้ำเมื่อตรงตามกรณีฐานเฉพาะ หากไม่มีฟังก์ชันพื้นฐาน ลูปอนันต์จะถูกสร้างขึ้น

ฟังก์ชันแบบเรียกซ้ำสามารถดำเนินการเองได้ไม่เกิน 1,000 ครั้งโดยค่าเริ่มต้น เมื่อถึงขีดจำกัดนี้ ข้อผิดพลาดเช่นนี้จะปรากฏขึ้น:

RecursionError: maximum recursion depth exceeded

นี่คือเงื่อนไขพื้นฐานสำหรับโปรแกรมฟีโบนักชีของเรา:

...
if number <= 1:
		return number
…

เงื่อนไขนี้จะตรวจสอบว่าค่าของ “number” ในโปรแกรม fibonacci ของเรามีค่าเท่ากับหรือน้อยกว่า 1 หรือไม่ หากเป็น ค่าของ “number” จะถูกส่งกลับ มิฉะนั้น ฟังก์ชันแบบเรียกซ้ำจะเริ่มต้นขึ้น

เหตุใดฉันจึงควรใช้การเรียกซ้ำ

ข้อดีของการใช้การเรียกซ้ำบนฟังก์ชันการวนซ้ำคืออะไร ในทางเทคนิค ทั้งสองวิธีสามารถบรรลุผลลัพธ์เดียวกันได้ ข้อดีของการเรียกซ้ำคืออ่านง่ายกว่า

เมื่อคุณเห็นฟังก์ชันแบบเรียกซ้ำ จะเห็นได้ชัดว่าคำตอบของปัญหาอยู่ที่การแยกย่อยเป็นส่วนย่อยๆ แม้ว่าบางครั้งการวนซ้ำแบบวนซ้ำอาจเร็วกว่า แต่มักจะต้องการใช้ฟังก์ชันแบบเรียกซ้ำเนื่องจากความสามารถในการอ่านได้

เนื่องจากฟังก์ชันแบบเรียกซ้ำนั้นอ่านง่ายกว่า จึงง่ายต่อการบำรุงรักษาและดีบัก สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณกำลังเขียนอัลกอริธึมที่ซับซ้อนซึ่งอาจเข้าใจยาก

บทสรุป

ฟังก์ชันแบบเรียกซ้ำคือฟังก์ชันที่เรียกตัวเองเพื่อค้นหาวิธีแก้ไขปัญหา

ฟังก์ชันแบบเรียกซ้ำจะแบ่งปัญหาออกเป็นหลายส่วนและแก้ปัญหาได้หนึ่งส่วนต่อการทำซ้ำ ฟังก์ชันแบบเรียกซ้ำมักใช้ในการคำนวณแฟกทอเรียลและตัวเลขในลำดับฟีโบนักชี พวกเขายังใช้ในอัลกอริธึมจำนวนหนึ่ง

ตอนนี้คุณพร้อมที่จะเริ่มทำงานกับฟังก์ชันแบบเรียกซ้ำใน Python แล้ว