ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Recursive Method
2
บทนำ การทำงานภายใน method หนึ่งสามารถเรียกใช้ method อื่นได้
method a เรียกใช้ method b method b เรียกใช้ method a method a เรียกใช้ตัวเอง
3
Method แบบเรียกตัวเองซ้ำ (recursive method)
4
Method แบบเรียกซ้ำ คือการที่ method เรียกใช้งาน method ของตัวเองซ้ำๆภายใน method นั้น คล้ายกับการทำงานแบบ loop แต่จะไม่คำสั่ง while หรือ for ปรากฎอยู่เลย
5
Recursive Programming
การเขียนโปรแกรมให้ method ใด method หนึ่ง หรือ หลาย method เรียกใช้ method ตัวเองซ้ำภายใน method นั้นไปเรื่อยๆ จนกว่าจะหลุดพ้นจากเงื่อนไขที่ตั้งไว้
6
Method แบบเรียกซ้ำ ทำไมต้องเขียน method แบบเรียกตัวเองซ้ำๆ
บางกรณีการเขียนโปรแกรมลักษณะนี้ทำให้ได้โปรแกรมที่สั้น สามารถเขียนคำสั่งได้ตรงไปตรงมาตามคำนิยามทางคณิตศาสตร์ ได้โปรแกรมที่สวย (ขึ้นกับรสนิยม) อ่านเข้าใจง่าย
7
ตัวอย่าง recursive method
กําหนดให้เมท็อด f(…) ใช้หาผลบวกของตวัเลขจํานวนเต็มตั้งแต่ 0 จนถึง n โดยที่ f(n) = ( … +n)
8
ขั้นตอนการทำงานของ 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 เป็นต้น
9
จงแสดงผลลัพธ์จากการเรียกใช้ recursive method
คำตอบ mul(4,3) 3 + mul(3, 3) 3 + (3 + mul(2,3)) (3 + mul(1,3)) (3 + mul(0,3)) = 12 mul(5,7) = 35 mul(20,10) … = 200
10
จงแสดงผลลัพธ์จากการเรียกใช้ 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
11
จงแสดงผลลัพธ์จากการเรียกใช้ recursive method
expo(3) 8 4 4 2 2 2 2 1 1 1 1 1 1 1 1
12
Recursive อย่างง่าย ขั้นตอนการแปลงสมการคณิตศาสตร์ให้เป็น recursive method แบบง่าย EX. จงหาผลบวกของตัวเลขจํานวนเต็มตั้งแต่ 0 จนถึง n (โดยที่ n ≥ 0) แปลงโจทย์ที่กําหนดให้ เป็นสมการหรือฟังก์ชันทางคณิตศาสตร์ หรือสมการในรูปทั่วไป แยกสมการออกเป็น 2 กรณี (หรืออาจจะมากกว่า 2 กรณีก็ได้) กรณีที่สมการเท่ากับค่าของพจน์แรกเพียงพจน์เดียวซึ่งจะได้ (2) กรณีที่สมการอยู่ในรูปทั่วไป แต่จะดึงพจน์สุดท้ายออกมาให้เห็นในสมการซึ่งจะได้
13
Recursive อย่างง่าย ขั้นตอนการแปลงสมการคณิตศาสตร์ให้เป็น recursive method แบบง่าย EX. จงหาผลบวกของตัวเลขจํานวนเต็มตั้งแต่ 0 จนถึง n (โดยที่ n ≥ 0) แปลงสมการทั้ง 2 กรณีที่ได้จากขั้นตอนที่ 2 ให้เป็น method โดยใช้คําสั่ง if-else เพื่อระบุ เงื่อนไขของแต่ละกรณี ซึ่งจะให้กรณีที่ 1 เป็น Base case และกรณีที่ 2 เป็น recursion case
14
ตัวอย่าง จงพิจารณาสมการต่อไปนี้เพื่อเขียนเป็น method f(…) ที่ทำงานแบบ recursive โดยให้รับค่า n เข้ามาทางพารามิเตอร์ n=1 , f(1) = 1 f(n) = f(n-1) + (1/n3)
15
ตัวอย่าง จงพิจารณาสมการต่อไปนี้เพื่อเขียนเป็น method f(…) ที่ทำงานแบบ recursive โดยให้รับค่า n เข้ามาทางพารามิเตอร์ f(1) = (1) = 3 f(n) = f(n-1) + (nn + 2n)
16
ตัวอย่างการเขียน method แบบเรียกซ้ำ
ผลบวก … + n เราสามารถเขียน method หาผลบวก int sum(int n) เพื่อคืนผลบวก … + n ได้ไม่ยาก สมมุติว่าไม่ใช้สูตร เราคงเขียน method โดยการใช้ loop
17
ตัวอย่างการเขียน method แบบเรียกซ้ำ
ผลบวก … + 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;
18
จำนวนฟิโบนักชี จำนวนฟิโบนักชี (Fibonacci number) คือ จำนวนในลำดับ 0, 1, 1, 2, 3, 5, 8, 13, … ให้ fn คือ จำนวนฟิโบนักชีตัวที่ n จะได้ว่า fn = fn-1 + fn-2 เมื่อ n >= 2 และ f0 = 1, f1 = 1
19
จำนวนฟิโบนักชี นิยาม fn = fn-1 + fn-2 เมื่อ n >= 2 และ f0 = 1, f1 = 1 ลักษณะปัญหาเช่นนี้ เหมาะที่จะแปลงเป็น method แบบเรียกซ้ำ ลองเขียนโปรแกรมกัน ^^
20
จำนวนฟิโบนักชี 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 }
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.