Recursive Method.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
ลิมิตและความต่อเนื่อง
Advertisements

บทที่ 3 ลำดับและอนุกรม (Sequences and Series)
โดยอาจารย์ศิริพร ศักดิ์บุญญารัตน์ ครูชำนาญการ โรงเรียนมหิดลวิทยานุสรณ์
การจำลองความคิด รายวิชา ง40102 หลักการแก้ปัญหาและการโปรแกรม
Introduction to C Programming
ครั้งที่ 8 Function.
บทที่ 3 ตอนที่ 1 คำสั่งเงื่อนไขและการตัดสินใจ(p
Control structure part II
Functional programming part II
Data Structures and Algorithms
Data Structures and Algorithms
Lecture no. 5 Control Statements
Lecture 13: ฟังก์ชันเรียกตัวเอง
Function.
ผังงานโปรแกรม (Program Flowchart)
บทที่ 4 การตัดสินใจในการเขียนโปรแกรม
CE 112 บทที่ 5 การทำซ้ำในภาษา C
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
การจำลองความคิด
Use Case Diagram.
C Programming Lecture no. 6: Function.
การควบคุมทิศทางการทำงานของโปรแกรม
Asst.Prof. Dr.Surasak Mungsing
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
Second-Order Circuits
จำนวนทั้งหมด ( Whole Numbers )
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (4) (Class & Object)
บทที่ 7 รีเคอร์ซีฟ ระหว่างการออกแบบเขียนโปรแกรมแบบบนลงล่าง (Top-down Design) จะมีงานย่อย(Subtask) เพื่อแก้ปัญหาในแต่ละเรื่อง และผู้เขียนโปรแกรมต้องการใช้งานย่อยในลักษณะที่เรียกตัวเองขึ้นมาทำงานลักษณะของฟังก์ชั่นมีความรอบรัดสั้นกว่าแบบวนลูป.
สุพจน์ สวัตติวงศ์ gamepad.pigcanfly.com
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Chapter 5 คำสั่งควบคุมการทำซ้ำ
Chapter 3 เครื่องหมายและการคำนวณ
Chapter 6 Decision Statement
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
ความสัมพันธ์เวียนบังเกิด
ค33211 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 5
จำนวนเต็มกับการหารลงตัว
สัปดาห์ที่ 7 การแปลงลาปลาซ The Laplace Transform.
คำสั่งควบคุมการทำงานของ ActionScripts
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
Recursion การเรียกซ้ำ
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
ฟังก์ชัน.
หลักการเขียนโปรแกรม ( )
หลักการเขียนโปรแกรม ( )
CHAPTER 4 Control Statements
หลักการเขียนโปรแกรม ( )
ตัวดำเนินการ และนิพจน์คณิตศาสตร์
ตัวประกอบ (Factor) 2 หาร 8 ลงตัว 3 หาร 8 ไม่ลงตัว 4 หาร 8 ลงตัว
PHP การตรวจสอบเงื่อนไข.
อัลกอริทึ่มทำงานวนซ้ำ
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
หลักการเขียนโปรแกรม ( )
ค32213 คณิตศาสตร์สำหรับคอมพิวเตอร์ อ.วีระ คงกระจ่าง
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
สาขาวิชาเทคโนโลยี สารสนเทศ คณะเทคโนโลยีสารสนเทศ และการสื่อสาร.
เรื่องการประยุกต์ของสมการเชิงเส้นตัวแปรเดียว
โครงสร้างข้อมูลแบบลิงก์ลิสต์
บทที่ 7 เงื่อนไขในภาษาซี
CONDITION Computer Programming Asst. Prof. Dr. Choopan Rattanapoka.
วิธีเรียงสับเปลี่ยนและวิธีจัดหมู่
1 Functions กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา.
โครงสร้างข้อมูลแบบ สแตก (stack)
กำหนดการพลวัต (Dynamic programming)
การแบ่งแยกและเอาชนะ Divide & Conquer
Wattanapong suttapak SE, ICT University of Phayao.
Nested loop.
ค31212 คณิตศาสตร์สำหรับ คอมพิวเตอร์ 2
ใบสำเนางานนำเสนอ:

Recursive Method

บทนำ การทำงานภายใน method หนึ่งสามารถเรียกใช้ method อื่นได้ method a เรียกใช้ method b method b เรียกใช้ method a method a เรียกใช้ตัวเอง

Method แบบเรียกตัวเองซ้ำ (recursive method)

Method แบบเรียกซ้ำ คือการที่ method เรียกใช้งาน method ของตัวเองซ้ำๆภายใน method นั้น คล้ายกับการทำงานแบบ loop แต่จะไม่คำสั่ง while หรือ for ปรากฎอยู่เลย

Recursive Programming การเขียนโปรแกรมให้ method ใด method หนึ่ง หรือ หลาย method เรียกใช้ method ตัวเองซ้ำภายใน method นั้นไปเรื่อยๆ จนกว่าจะหลุดพ้นจากเงื่อนไขที่ตั้งไว้

Method แบบเรียกซ้ำ ทำไมต้องเขียน method แบบเรียกตัวเองซ้ำๆ บางกรณีการเขียนโปรแกรมลักษณะนี้ทำให้ได้โปรแกรมที่สั้น สามารถเขียนคำสั่งได้ตรงไปตรงมาตามคำนิยามทางคณิตศาสตร์ ได้โปรแกรมที่สวย (ขึ้นกับรสนิยม) อ่านเข้าใจง่าย

ตัวอย่าง recursive method กําหนดให้เมท็อด f(…) ใช้หาผลบวกของตวัเลขจํานวนเต็มตั้งแต่ 0 จนถึง n โดยที่ f(n) = (0+1+2+ … +n)

ขั้นตอนการทำงานของ recursive method ประกอบด้วย 2 กรณี Recursion case เป็นกรณีที่ method คืนค่าที่เกิดจากการเรียกใช้ method ของตัวมันเอง เช่น return fac(n-1), return fibo(n-1) + fibo(n-2) เป็นต้น เสมือนเป็นการเรียกซ้ำ เมท็อดตัวเองอีกครั้งอยู่ภายใน method นั้น โดยจะเรียกซ้ำแบบนี้ไปเรื่อยๆ จนกว่าจะเข้าสู่ Base case จึงจะหยุดการเรียกซ้ำ Base case เป็นกรณีสิ้นสุดการเรียกตัวเองซ้ำ ซึ่ง method จะคืนค่าคงที่ค่าใดค่าหนึ่งออกมา เช่น return 0 , return 1 เป็นต้น

จงแสดงผลลัพธ์จากการเรียกใช้ recursive method คำตอบ mul(4,3) 3 + mul(3, 3) 3 + (3 + mul(2,3)) 3 + 3 + (3 + mul(1,3)) 3 + 3 + 3 + (3 + mul(0,3)) 3 + 3 + 3 + 3 + 0 = 12 mul(5,7) 7 + 7 + 7 + 7 + 7 + 0 = 35 mul(20,10) 10 + 10 + 10 … + 10 + 0 = 200

จงแสดงผลลัพธ์จากการเรียกใช้ recursive method คำตอบ gcd(28,16) gcd(16 , 12) gcd(12, 4) 4 gcd(9,14) gcd(14, 9) gcd(9,5) gcd(5,4) gcd(4,1) 1 การเรียกใช้ คำตอบ gcd(75,30) gcd(30,15) 15

จงแสดงผลลัพธ์จากการเรียกใช้ recursive method expo(3) 8 4 4 2 2 2 2 1 1 1 1 1 1 1 1

Recursive อย่างง่าย ขั้นตอนการแปลงสมการคณิตศาสตร์ให้เป็น recursive method แบบง่าย EX. จงหาผลบวกของตัวเลขจํานวนเต็มตั้งแต่ 0 จนถึง n (โดยที่ n ≥ 0) แปลงโจทย์ที่กําหนดให้ เป็นสมการหรือฟังก์ชันทางคณิตศาสตร์ หรือสมการในรูปทั่วไป แยกสมการออกเป็น 2 กรณี (หรืออาจจะมากกว่า 2 กรณีก็ได้) กรณีที่สมการเท่ากับค่าของพจน์แรกเพียงพจน์เดียวซึ่งจะได้ (2) กรณีที่สมการอยู่ในรูปทั่วไป แต่จะดึงพจน์สุดท้ายออกมาให้เห็นในสมการซึ่งจะได้

Recursive อย่างง่าย ขั้นตอนการแปลงสมการคณิตศาสตร์ให้เป็น recursive method แบบง่าย EX. จงหาผลบวกของตัวเลขจํานวนเต็มตั้งแต่ 0 จนถึง n (โดยที่ n ≥ 0) แปลงสมการทั้ง 2 กรณีที่ได้จากขั้นตอนที่ 2 ให้เป็น method โดยใช้คําสั่ง if-else เพื่อระบุ เงื่อนไขของแต่ละกรณี ซึ่งจะให้กรณีที่ 1 เป็น Base case และกรณีที่ 2 เป็น recursion case

ตัวอย่าง จงพิจารณาสมการต่อไปนี้เพื่อเขียนเป็น method f(…) ที่ทำงานแบบ recursive โดยให้รับค่า n เข้ามาทางพารามิเตอร์ n=1 , f(1) = 1 f(n) = f(n-1) + (1/n3)

ตัวอย่าง จงพิจารณาสมการต่อไปนี้เพื่อเขียนเป็น method f(…) ที่ทำงานแบบ recursive โดยให้รับค่า n เข้ามาทางพารามิเตอร์ f(1) = 11 + 2(1) = 3 f(n) = f(n-1) + (nn + 2n)

ตัวอย่างการเขียน method แบบเรียกซ้ำ ผลบวก 1 + 2 + … + n เราสามารถเขียน method หาผลบวก int sum(int n) เพื่อคืนผลบวก 1 + 2 + … + n ได้ไม่ยาก สมมุติว่าไม่ใช้สูตร เราคงเขียน method โดยการใช้ loop

ตัวอย่างการเขียน method แบบเรียกซ้ำ ผลบวก 1 + 2 + … + n จากนิยาม Sn = Sn-1 + n เมื่อ n > 0 และ S0 = 0 เราสามารถเขียน method แบบเรียกซ้ำ สั้นๆ ได้ ดังนี้ public static int sum(int n) { if(n==0) { return 0; } else{ sum = sum(n-1) + n; } return sum;

จำนวนฟิโบนักชี จำนวนฟิโบนักชี (Fibonacci number) คือ จำนวนในลำดับ 0, 1, 1, 2, 3, 5, 8, 13, … ให้ fn คือ จำนวนฟิโบนักชีตัวที่ n จะได้ว่า fn = fn-1 + fn-2 เมื่อ n >= 2 และ f0 = 1, f1 = 1

จำนวนฟิโบนักชี นิยาม fn = fn-1 + fn-2 เมื่อ n >= 2 และ f0 = 1, f1 = 1 ลักษณะปัญหาเช่นนี้ เหมาะที่จะแปลงเป็น method แบบเรียกซ้ำ ลองเขียนโปรแกรมกัน ^^

จำนวนฟิโบนักชี public static int fib(int n){ if(n <= 1) { return n; // f0 = 1, f1 = 1 } else { return fib(n-1) + fib(n-2) ; // fn = fn-1 + fn-2 }