Enviar pesquisa
Carregar
Java-Chapter 11 Recursions
•
2 gostaram
•
3,051 visualizações
Wongyos Keardsri
Seguir
Chapter 11 Recursions
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 12
Baixar agora
Baixar para ler offline
Recomendados
Java-Answer Chapter 01-04
Java-Answer Chapter 01-04
Wongyos Keardsri
Java-Answer Chapter 08-09
Java-Answer Chapter 08-09
Wongyos Keardsri
Java-Answer Chapter 07
Java-Answer Chapter 07
Wongyos Keardsri
Java-Chapter 08 Methods
Java-Chapter 08 Methods
Wongyos Keardsri
Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)
Wongyos Keardsri
Java-Answer Chapter 05-06
Java-Answer Chapter 05-06
Wongyos Keardsri
Java-Answer Chapter 12-13
Java-Answer Chapter 12-13
Wongyos Keardsri
Java-Answer Chapter 10-11
Java-Answer Chapter 10-11
Wongyos Keardsri
Recomendados
Java-Answer Chapter 01-04
Java-Answer Chapter 01-04
Wongyos Keardsri
Java-Answer Chapter 08-09
Java-Answer Chapter 08-09
Wongyos Keardsri
Java-Answer Chapter 07
Java-Answer Chapter 07
Wongyos Keardsri
Java-Chapter 08 Methods
Java-Chapter 08 Methods
Wongyos Keardsri
Java-Answer Chapter 01-04 (For Print)
Java-Answer Chapter 01-04 (For Print)
Wongyos Keardsri
Java-Answer Chapter 05-06
Java-Answer Chapter 05-06
Wongyos Keardsri
Java-Answer Chapter 12-13
Java-Answer Chapter 12-13
Wongyos Keardsri
Java-Answer Chapter 10-11
Java-Answer Chapter 10-11
Wongyos Keardsri
Java-Answer Chapter 10-11 (For Print)
Java-Answer Chapter 10-11 (For Print)
Wongyos Keardsri
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)
Wongyos Keardsri
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)
Wongyos Keardsri
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)
Wongyos Keardsri
Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)
Wongyos Keardsri
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
Wongyos Keardsri
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and Objects
Wongyos Keardsri
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java Programming
Wongyos Keardsri
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Finian Nian
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 Algorithms
Wongyos Keardsri
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
Kanomwan Jeab
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
sawed kodnara
บทที่ 5 คลาส
บทที่ 5 คลาส
Theeravaj Tum
6.Flow control
6.Flow control
UsableLabs
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional Arrays
Wongyos Keardsri
อนุพันธ์
อนุพันธ์
krurutsamee
ปริพันธ์
ปริพันธ์
พัน พัน
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and Collection
IMC Institute
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
Thanachart Numnonda
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่น
Thanachart Numnonda
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master Program
Wongyos Keardsri
การเขียนคำสังควบคุมขั้นพื้นฐาน 2
การเขียนคำสังควบคุมขั้นพื้นฐาน 2
Tay Atcharawan
Mais conteúdo relacionado
Mais procurados
Java-Answer Chapter 10-11 (For Print)
Java-Answer Chapter 10-11 (For Print)
Wongyos Keardsri
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)
Wongyos Keardsri
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)
Wongyos Keardsri
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)
Wongyos Keardsri
Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)
Wongyos Keardsri
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
Wongyos Keardsri
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and Objects
Wongyos Keardsri
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java Programming
Wongyos Keardsri
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Finian Nian
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 Algorithms
Wongyos Keardsri
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
Kanomwan Jeab
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
sawed kodnara
บทที่ 5 คลาส
บทที่ 5 คลาส
Theeravaj Tum
6.Flow control
6.Flow control
UsableLabs
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional Arrays
Wongyos Keardsri
อนุพันธ์
อนุพันธ์
krurutsamee
ปริพันธ์
ปริพันธ์
พัน พัน
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and Collection
IMC Institute
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
Thanachart Numnonda
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่น
Thanachart Numnonda
Mais procurados
(20)
Java-Answer Chapter 10-11 (For Print)
Java-Answer Chapter 10-11 (For Print)
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 07 (For Print)
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 05-06 (For Print)
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 12-13 (For Print)
Java-Answer Chapter 08-09 (For Print)
Java-Answer Chapter 08-09 (For Print)
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 13 Advanced Classes and Objects
Java-Chapter 12 Classes and Objects
Java-Chapter 12 Classes and Objects
Java-Chapter 01 Introduction to Java Programming
Java-Chapter 01 Introduction to Java Programming
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Discrete-Chapter 09 Algorithms
Discrete-Chapter 09 Algorithms
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
สูตรอนุพันธ์ของฟังก์ชัน อนินท์ญา
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
ค่าสูงสุดสัมบูรณ์และค่าต่ำสุดสัมบูรณ์ของฟังก์ชัน
บทที่ 5 คลาส
บทที่ 5 คลาส
6.Flow control
6.Flow control
Java-Chapter 10 Two Dimensional Arrays
Java-Chapter 10 Two Dimensional Arrays
อนุพันธ์
อนุพันธ์
ปริพันธ์
ปริพันธ์
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and Collection
Java Programming: โครงสร้างควบคุม
Java Programming: โครงสร้างควบคุม
Java Programming: อะเรย์และคอลเล็กชั่น
Java Programming: อะเรย์และคอลเล็กชั่น
Destaque
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master Program
Wongyos Keardsri
การเขียนคำสังควบคุมขั้นพื้นฐาน 2
การเขียนคำสังควบคุมขั้นพื้นฐาน 2
Tay Atcharawan
Java ug
Java ug
Tibor Kurina, PhD
Unit02
Unit02
TaiMe Sakdisri
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional Arrays
Wongyos Keardsri
Java-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration Statements
Wongyos Keardsri
Java-Chapter 06 File Operations
Java-Chapter 06 File Operations
Wongyos Keardsri
Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and Applications
Wongyos Keardsri
Java-Chapter 05 String Operations
Java-Chapter 05 String Operations
Wongyos Keardsri
Java-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and Processing
Wongyos Keardsri
IP address anonymization
IP address anonymization
Wongyos Keardsri
การควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรม
korn27122540
Destaque
(12)
How to Study and Research in Computer-related Master Program
How to Study and Research in Computer-related Master Program
การเขียนคำสังควบคุมขั้นพื้นฐาน 2
การเขียนคำสังควบคุมขั้นพื้นฐาน 2
Java ug
Java ug
Unit02
Unit02
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 07 One Dimensional Arrays
Java-Chapter 04 Iteration Statements
Java-Chapter 04 Iteration Statements
Java-Chapter 06 File Operations
Java-Chapter 06 File Operations
Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 09 Advanced Statements and Applications
Java-Chapter 05 String Operations
Java-Chapter 05 String Operations
Java-Chapter 02 Data Operations and Processing
Java-Chapter 02 Data Operations and Processing
IP address anonymization
IP address anonymization
การควบคุมทิศทางการทำงานของโปรแกรม
การควบคุมทิศทางการทำงานของโปรแกรม
Mais de Wongyos Keardsri
The next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applications
Wongyos Keardsri
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script Programming
Wongyos Keardsri
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating System
Wongyos Keardsri
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming Language
Wongyos Keardsri
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part III
Wongyos Keardsri
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part II
Wongyos Keardsri
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part I
Wongyos Keardsri
Discrete-Chapter 10 Trees
Discrete-Chapter 10 Trees
Wongyos Keardsri
Discrete-Chapter 08 Relations
Discrete-Chapter 08 Relations
Wongyos Keardsri
Discrete-Chapter 07 Probability
Discrete-Chapter 07 Probability
Wongyos Keardsri
Discrete-Chapter 06 Counting
Discrete-Chapter 06 Counting
Wongyos Keardsri
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and Proofs
Wongyos Keardsri
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part II
Wongyos Keardsri
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part I
Wongyos Keardsri
Discrete-Chapter 03 Matrices
Discrete-Chapter 03 Matrices
Wongyos Keardsri
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and Sequences
Wongyos Keardsri
Discrete-Chapter 01 Sets
Discrete-Chapter 01 Sets
Wongyos Keardsri
Discrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling Computation
Wongyos Keardsri
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindow
Wongyos Keardsri
Mais de Wongyos Keardsri
(19)
The next generation intelligent transport systems: standards and applications
The next generation intelligent transport systems: standards and applications
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 03 Unix Shell Script Programming
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 02 Introduction to Unix Operating System
SysProg-Tutor 01 Introduction to C Programming Language
SysProg-Tutor 01 Introduction to C Programming Language
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part III
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part II
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 11 Graphs Part I
Discrete-Chapter 10 Trees
Discrete-Chapter 10 Trees
Discrete-Chapter 08 Relations
Discrete-Chapter 08 Relations
Discrete-Chapter 07 Probability
Discrete-Chapter 07 Probability
Discrete-Chapter 06 Counting
Discrete-Chapter 06 Counting
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 05 Inference and Proofs
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part II
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 04 Logic Part I
Discrete-Chapter 03 Matrices
Discrete-Chapter 03 Matrices
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 02 Functions and Sequences
Discrete-Chapter 01 Sets
Discrete-Chapter 01 Sets
Discrete-Chapter 12 Modeling Computation
Discrete-Chapter 12 Modeling Computation
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 14 Creating Graphics with DWindow
Java-Chapter 11 Recursions
1.
Recursion - 11
Computer Programming using Java 145 CHAPTER การเวียนเกิด 11 (Recursion) 1. ความร้ ูเบืองต้ นเกี่ยวกับการเวียนเกิด (Introduction to Recursion) ้ 1. นิยามของการเวียนเกิด 1) การเวียนเกิด (Recursion) คือ ปรากฏการณ์ที่มีการวนกลับไปอ้ างอิงถึง ตัว เองซํ า แล้ ว ซํ ้าเล่า แบบไม่ร้ ูจ บ ซึ่ง มี ป รากฎอยู่ใ นหลายๆ วงการ เช่ น ้ ศิลปะ ดนตรี คณิตศาสตร์ และรวมถึงคอมพิวเตอร์ อีกด้ วย ในภาษาจาวา นันการเวียนเกิดจะเกิดขึ ้นได้ กบเมท็อด ้ ั 2) เมท็อดแบบเวียนเกิด (Recursive Method) คือ เมท็อดที่เรี ยกใช้ เมท็อด ตัวเองซํ ้าภายในเมท็อดนั ้น (จะทําหน้ าที่เป็ นทังผู้เรี ยกและผู้ที่ถกเรี ยกใน ้ ู เวลาเดียวกันกับเมท็อดตัวเดียวกัน) ซึงจะมีกระบวนการทํางานทุกอย่าง ่ เหมือนกับการวนซํ ้า (Iteration) ในบทที่ 4 ทุกประการแต่จะไม่มีคําสัง ่ while หรื อ for ที่กล่าวไว้ ในบทที่ 4 ปรากฎอยูเลย ่ 3) การเขียนโปรแกรมแบบเวียนเกิด (Recursive Programming) คือ การ Droste Effect คือภาพที่ปรา- กฏการเวียนเกิดภายในภาพ เขียนโปรแกรมโดยให้ เมท็อดใดเมท็อดหนึ่งหรื อหลายเมท็อด เรี ยกใช้ เม- ท็อดตัวเองซํ ้าภายในเมท็อดนันไปเรื่ อยๆ จนกว่าจะหลุดพ้ นจาก เงื่อนไขหรื อสิ ้นสุดการเวียนเกิด ้ 2. ขันตอนการทํางานของเมท็อดแบบเวียนเกิด จะประกอบไปด้ วย 2 กรณี คือ ้ 1) กรณีเวียนเกิด (Recursion Case) เป็ นกรณีที่เมท็อดคืนค่าที่เกิดจากการเรี ยกใช้ งานเมท็อดตัวมันเอง เช่น return fac(n-1), return fibo(n-1) + fibo(n-2) เป็ นต้ น ซึงเสมือนเป็ นการเรี ยกซํ ้า ่ เมท็อดตัวเองอีกครังอยู่ภายในเมท็อดนัน โดยเมท็อดจะเรี ยกซํ ้าแบบนี ้ไปเรื่ อยๆ จนกว่าจะเข้ าสูกรณีฐาน ้ ้ ่ จึงจะหยุดการเรี ยกซํ ้า 2) กรณีฐาน (Base Case) เป็ นกรณีสิ ้นสุดการเวียนเกิด หรื อกรณีที่เมท็อดสามารถทํางานเสร็ จได้ ทนทีโดย ั ไม่ต้องมีการเรี ยกซํ ้าอีก ซึงเมท็อดจะคืนค่าคงที่คาใดค่าหนึงออกมา เช่น return 1, return n เป็ นต้ น ่ ่ ่ 3. ตัวอย่ างเมท็อดแบบเวียนเกิด กําหนดให้ เมท็อด f(…) ใช้ หาผลบวกของตัวเลขจํานวนเต็มตังแต่ 0 จนถึง n โดยที่ f(n) = (0+1+2+ ้ … +n) ใช้ หลักการวนซํา (Iteration: for) ้ ใช้ หลักการเวียนเกิด (Recursion) 1 public static int f(int n) { 1 public static int f(int n) { 2 int s = 0; 2 if(n <= 0) { 3 for(int i = n; i >= 0; i--) { 3 return 0; กรณีฐาน 4 s += i; 4 } else { 5 } 5 return f(n - 1) + n; 6 return s; วนกลับหลัง 6 } 7 } 7 } กรณีเวียนเกิด © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
2.
146
Computer Programming using Java 11 - Recursion โจทย์ ข้อที่ 1 [ระดับง่ าย] จากการทํางานแบบเวียนเกิดของเมท็อด f(…) ก่ อนหน้ านี ้ จงแสดงรายละเอียด การทํางานของเมท็อดดังกล่ าวเมื่อเรี ยกใช้ f(5) (10 คะแนน) เรี ยก เรี ยก เรี ยก เรี ยก เรี ยก เรี ยก ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ เวียนเข้ า รอบที่ 1 รอบที่ 2 รอบที่ 3 รอบที่ 4 รอบที่ 5 รอบที่ 6 คืนค่ า คืนค่ า คืนค่ า คืนค่ า คืนค่ า คืนค่ า ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ ผลลัพธ์ เวียนออก รอบที่ 1 รอบที่ 2 รอบที่ 3 รอบที่ 4 รอบที่ 5 รอบที่ 6 โจทย์ ข้อที่ 2 [ระดับง่ าย] จงแสดงผลลัพธ์ จากการเรียกใช้ เมท็อดแบบเวียนเกิดต่ อไปนี ้ (6 คะแนน) 1 public static int mul(int x, int y) { การเรียกใช้ คําตอบ 2 if (x >= 1) { 3 return y + mul(x - 1, y); mul(4, 3) 4 } else { 5 return 0; mul(5, 7) 6 } 7 } เรี ยกการเวียนเกิดแบบนี ้ว่า Linear Recursion mul(20, 10) โจทย์ ข้อที่ 3 [ระดับง่ าย] จงแสดงผลลัพธ์ จากการเรียกใช้ เมท็อดแบบเวียนเกิดต่ อไปนี ้ (6 คะแนน) 1 public static int gcd(int m, int n) { การเรียกใช้ คําตอบ 2 if (m < n) return gcd(n, m); 3 if (m % n == 0) { gcd(28, 16) 4 return n; 5 } else { gcd(9, 14) 6 return gcd(n, m % n); 7 } gcd(75, 30) 8 } เรี ยกการเวียนเกิดแบบนี ้ว่า Tail Recursion © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
3.
Recursion - 11
Computer Programming using Java 147 โจทย์ ข้อที่ 4 [ระดับง่ าย] จงแสดงผลลัพธ์ และรายละเอียดจากการเรียกใช้ เมท็อด expo(…) (15 คะแนน) 1 public static int expo(int n) { การเรียกใช้ คําตอบ 2 if (n <= 0) { 3 return 1; expo(4) 4 } else { 5 return expo(n - 1) + expo(n - 1); expo(7) 6 } 7 } เรี ยกการเวียนเกิดแบบนี ้ว่า Binary Recursion expo(11) จงแสดงรายละเอียดของต้ นไม้ แบบทวิภาค (Binary Tree) จากการเรียกใช้ expo(0), expo(1), expo(2) และ expo(3) expo(0) expo(1) expo(2) expo(0) expo(0) expo(1) expo(1) expo(0) expo(0) expo(0) expo(0) expo(3) expo(2) expo(2) expo(1) expo(1) expo(1) expo(1) expo(0) expo(0) expo(0) expo(0) expo(0) expo(0) expo(0) expo(0) โจทย์ ข้อที่ 5 [ระดับง่ าย] จงแสดงผลลัพธ์ จากการเรียกใช้ เมท็อดแบบเวียนเกิดต่ อไปนี ้ (6 คะแนน) 1 public static void printX(int x) { การเรียกใช้ และคําตอบ 2 if (x >= 1) { 3 printX(1, x); printX(4) printX(7) 4 } 5 } 6 public static void printX(int i, int x) { 7 if (i <= x) { 8 System.out.print(i); 9 printX(i + 1, x); 10 } else { 11 System.out.println(); 12 printX(x - 1); 13 } 14 } เรี ยกการเวียนเกิดแบบนี ้ว่า Mutual Recursion © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
4.
148
Computer Programming using Java 11 - Recursion โจทย์ ข้อที่ 6 [ระดับปานกลาง] จงแสดงผลลัพธ์ ในตารางต่ อไปนีให้ ถกต้ อง ซึ่งเกิดจากการเรี ยกใช้ เมท็อด ้ ู akm(m, n) แบบเวียนเกิด โดยกําหนดให้ ใช้ ค่าพารามิเตอร์ m และ n ตามตาราง (10 คะแนน) 1 public static int akm(int m, int n) { 2 if (m == 0) { เรี ยกการเวียนเกิดแบบนี ้ว่า Nested Recursion 3 return n + 1; 4 } else if (n == 0) { 5 return akm(m - 1, 1); เป็ น Recursion ที่ไม่สามารถ 6 } else { 7 return akm(m - 1, akm(m, n - 1)); เปลี่ยนเป็ น Iteration ได้ เสนอ 8 9 } } โดย Wilhelm Ackermann พารามิเตอร์ n พารามิเตอร์ m 0 1 2 3 4 0 1 2 3 2. การเวียนเกิดแบบง่ าย (Basic Recursion) 1. การเวียนเกิดแบบง่ าย ได้ แก่ การเวียนเกิดที่ทํางานเสร็ จสิ ้นอยูภายในเมท็อดเดียว ซึงในบทนี ้จะเน้ นการเวียน ่ ่ เกิดแบบ Linear Recursion, Tail Recursion และ Binary Recursion เป็ นหลัก 2. ลักษณะของเมท็อดที่ปรากฎในการเวียนเกิดแบบง่ าย โดยทัวไปแล้ วจะเป็ นเมท็อดที่ใช้ หาผลลัพธ์ ทาง ่ คณิตศาสตร์ เช่น อนุกรม (Series), ฟั งก์ชน (Functions) หรื อ อัลกอริทม (Algorithms) เป็ นต้ น ั ึ 3. การแปลงสมการคณิตศาสตร์ ให้ เป็ นเมท็อดเวียนเกิดแบบง่ าย มีขนตอนดังนี ้ ั้ กําหนดโจทย์ จงหาผลบวกของตัวเลขจํานวนเต็มตังแต่ 0 จนถึง n (โดยที่ n ≥ 0) ้ 1) แปลงโจทย์ที่กําหนดให้ ให้ เป็ นสมการหรื อฟั งก์ชนทางคณิตศาสตร์ หรื อสมการในรูปทัวไปซึงจะได้ ั ่ ่ n f(n) = ∑i n = 0,1,2,3,… i =0 2) แยกสมการออกเป็ น 2 กรณี (หรื ออาจจะมากกว่า 2 กรณีก็ได้ ) ซึงได้ แก่ ่ (1) กรณีที่สมการเท่ากับค่าของพจน์แรกเพียงพจน์เดียวซึงจะได้ ่ f(n) = 0 n = 0 1 (2) กรณีที่สมการอยูในรูปทัวไป แต่จะดึงพจน์สดท้ ายออกมาให้ เห็นในสมการซึงจะได้ ่ ่ ุ ่ n −1 f(n) = ∑i + n n = 1,2,3,… i =0 f(n) = f(n - 1) + n n = 1,2,3,… 2 © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
5.
Recursion - 11
Computer Programming using Java 149 3) แปลงสมการทัง้ 2 กรณีที่ได้ จากขันตอนที่ 2 ให้ เป็ นเมท็อดในภาษาจาวาโดยใช้ คําสัง if-else เพื่อระบุ ้ ่ เงื่อนไขของแต่ละกรณี ซึงจะให้ กรณีที่ 1 เป็ นกรณีฐาน และกรณีที่ 2 เป็ นกรณีเวียนเกิด ่ 1 public static int f(int n) { 1 public static int f(int n) { 2 if(n > 0) { 2 if(n <= 0) { 3 return f(n - 1) + n; 3 return 0; 4 } else { 4 } else { 5 return 0; 5 return f(n - 1) + n; 6 } 6 } 7 } เมื่อ n มากกว่า 7 } ในการเวียนเกิดแต่ละรอบ เมื่อ n น้ อยกว่าหรื อเท่ากับ 0 จะทําการเวียน จะมีการลดค่า n ลง 1 0 จะหยุดการเวียนเกิด เกิด (ไปเรื่ อยๆ) โจทย์ ข้อที่ 7 [ระดับง่ าย] จงพิจารณาสมการต่ อไปนีเ้ พื่อเขียนเป็ นเมท็อด f(…) ที่ทางานแบบเวียนเกิด ํ โดยให้ รับค่ า n เข้ ามาทางพารามิเตอร์ และไม่ อนุญาตให้ ใช้ เมท็อดจากคลาส Math (10 คะแนน) n กรณีฐาน ∑ i3 1 f n) = ( n ≥ 1 i=1 กรณีเวียนเกิด โจทย์ ข้อที่ 8 [ระดับง่ าย] จงพิจารณาสมการต่ อไปนีเ้ พื่อเขียนเป็ นเมท็อด f(…) ที่ทางานแบบเวียนเกิด ํ โดยให้ รับค่ า n เข้ ามาทางพารามิเตอร์ และอนุญาตให้ ใช้ เมท็อดจากคลาส Math (10 คะแนน) ⎧ n ∑ ⎪ (i + 2i) f n) = ⎨i = 1 ( i n ≥ 1 ⎪0 n = 0 ⎩ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
6.
150
Computer Programming using Java 11 - Recursion โจทย์ ข้อที่ 9 [ระดับง่ าย] จงพิจารณาสมการต่ อไปนีเ้ พื่อเขียนเป็ นเมท็อด g(…) ที่ทางานแบบเวียนเกิด ํ โดยให้ รับค่ า n เข้ ามาทางพารามิเตอร์ และไม่ อนุญาตให้ ใช้ เมท็อดจากคลาส Math (10 คะแนน) ⎧ n ⎛ 1⎞ ⎪ ∏ ⎜1 + ⎟ ⎪i = 2 ⎝ i⎠ n ≥ 2 ⎪ g n) = ⎨1 ( n = 1 ⎪ ⎪ ⎪0 ⎩ n = 0 โจทย์ ข้อที่ 10 [ระดับง่ าย] จงเขียนเมท็อด fac(…)แบบเวียนเกิดเพื่อคํานวณค่ าแฟกทอเรียล (Factorial) ของตัวเลขจํานวนเต็ม n เช่ น fac(5) คือค่ าของ 5! ซึ่งเท่ ากับ 120 เป็ นต้ น (10 คะแนน) โจทย์ ข้อที่ 11 [ระดับง่ าย] จงเขียนเมท็อด fibo(…) แบบเวียนเกิดเพื่อคํานวณหาคําตอบของสมการฟิ - โบแนคซี (Fibonacci) ซึ่งมีรูปแบบสมการเป็ นดังนี ้ fibo(n) = fibo(n - 1) + fibo(n - 2) เมื่อ n >= 2 โดยกําหนดให้ fibo(0) = 0 และ fibo(1) = 1 (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
7.
Recursion - 11
Computer Programming using Java 151 โจทย์ ข้อที่ 12 [ระดับง่ าย] จากเมท็อด fibo(…) ในโจทย์ ด้านบนจงแสดงรายละเอียดของต้ นไม้ แบบทวิ- ภาค (Binary Tree) ในการหาค่ า fibo(5) (5 คะแนน) fibo(5) fibo(4) fibo(3) fibo(3) fibo(2) fibo(2) fibo(1) fibo(2) fibo(1) fibo(1) fibo(0) fibo(1) fibo(0) fibo(1) fibo(0) โจทย์ ข้อที่ 13 [ระดับปานกลาง] จงเขียนเมท็อด pow(…) แบบเวียนเกิดเพื่อคํานวณหาค่ ายกกําลังของ ab โดยกําหนดให้ a เป็ นจํานวนจริง และ b เป็ นจํานวนเต็มใดๆ (เต็มบวก เต็มลบ เต็มศนย์ ) (10 คะแนน) ู ไม่ อนุญาตให้ ใช้ เมท็อดจากคลาส Math โจทย์ ข้อที่ 14 [ระดับยาก] จงเขียนเมท็อด f(…)แบบเวียนเกิดจากสมการต่ อไปนี ้ โดยให้ รับค่ า n เข้ ามา ทางพารามิเตอร์ และไม่ อนุญาตให้ ใช้ เมท็อดจากคลาส Math (10 คะแนน) n f n) = 1 + ( n − 1 1 + n − 2 1 + n − 3 1 + O 1 + 1 © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
8.
152
Computer Programming using Java 11 - Recursion โจทย์ ข้อที่ 15 [ระดับยาก] จงพิจารณาสมการที่กําหนดให้ ต่อไปนี ้ เพื่อเขียนเป็ นเมท็อดที่มีการทํางาน แบบเวียนเกิด โดยให้ รับค่ าตัวแปรที่ใช้ ในการคํานวณเข้ ามาทางพารามิเตอร์ (20 คะแนน) 1) g(n, m) = 1m - 2m + 3m - … + (nm) n = 1,2,3,… (10 คะแนน) อนุญาตให้ ใช้ เมท็อดจากคลาส Math 1 1 1 1 2) h(n) = 1 + − + − ... + n = 1,2,3,… (10 คะแนน) 2 3 4 n ไม่ อนุญาตให้ ใช้ เมท็อดจากคลาส Math 3. การเวียนเกิดแบบซับซ้ อน (Advanced Recursion) 1. การเวียนเกิดแบบซับซ้ อน ได้ แก่ การเวียนเกิดที่ใช้ เมท็อดตังแต่ 2 เมท็อดขึ ้นไปในการทํางาน (เมท็อดมีการ Overload กัน) ซึงในบทนี ้จะเน้ น ้ ่ การเวียนเกิดแบบ Mutual Recursion เป็ นหลัก © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
9.
Recursion - 11
Computer Programming using Java 153 2. ลักษณะของเมท็อดที่ปรากฎในการเวียนเกิดแบบซับซ้ อน โดยทัวไปแล้ วจะเป็ นเมท็อดที่ใช้ ประมวลผล ่ เกี่ยวกับสตริ ง (String) และอาเรย์ (Arrays) ดังตัวอย่างต่อไปนี ้ 1 public static int max(int a[]) { 2 return max(a, 0, a[0]); เมท็อด max(…) มีการ Overload กัน 3 } 4 5 public static int max(int a[], int i, int m) { 6 if (i < a.length) { 7 if (a[i] > m) m = a[i]; เมท็อด max(…) ใช้ หาค่าสมาชิกที่มากที่สดใน ุ 8 return max(a, i + 1, m); 9 } else { อาเรย์ โดยเมท็อด max(…) ด้ านบนจะรับอาเรย์ 10 return m; 11 } เข้ ามาแล้ วส่งต่อไปให้ กบเมท็อด max(…) ด้ าน- ั 12 } ล่างเพื่อเวียนเกิด (Indirect Recursion) 3. หลักการเขียนเมท็อดเวียนเกิดแบบซับซ้ อน การเขียนเมท็อดเวียนเกิดแบบซับซ้ อนจะต้ องเขียนเมท็อดหลายเมท็อดที่ Overload กันเสมอ เพราะเนื่องจาก เมท็อดเวียนเกิดตัวแรกที่ประมวลผลอาจต้ องใช้ ตวแปรหรื อค่าบางค่าเพิ่มเติมภายในเมท็อด และค่าเหล่านัน ั ้ จะต้ องนํากลับไปใช้ ต่อเนื่องในรอบต่อๆ ไปอีกด้ วย เช่น ค่าตําแหน่งปั จจุบนในอาเรย์ เป็ นต้ น ดังนันจึงต้ องส่ง ั ้ ค่าทุกค่าผ่านไปยังพารามิเตอร์ เราจึงจําเป็ นต้ องสร้ างเมท็อดตัวที่สองขึ ้นมาที่ Overload กับตัวแรก เพื่อให้ สามารถส่งค่าทุกค่าที่ต้องใช้ งานผ่านไปยังพารามิเตอร์ ได้ ครบถ้ วน แล้ วให้ ทําการเวียนเกิดที่เมท็อดตัวที่สองนี ้ โจทย์ ข้อที่ 16 [ระดับปานกลาง] จงเขียนเมท็อด search(…) แบบเวียนเกิดเพื่อค้ นหาตําแหน่ งสมาชิกใน อาเรย์ ท่ ีมีค่าเท่ ากับจํานวนเต็มที่รับเข้ ามา ถ้ าค้ นเจอให้ คืนค่ าตําแหน่ งสมาชิกที่เจอ แต่ ถ้าไม่ เช่ นนันให้ ้ คืนค่ า -1 (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
10.
154
Computer Programming using Java 11 - Recursion โจทย์ ข้อที่ 17 [ระดับปานกลาง] จงเขียนเมท็อด overHundred(…) แบบเวียนเกิดเพื่อนับตัวเลขจํานวน เต็มที่มีค่ามากกว่ า 100 ในอาเรย์ d ที่รับเข้ ามาว่ ามีก่ ีจานวน (10 คะแนน) ํ public class OverHundredNumber { public static void main(String[] args) { int d[] = { 99, 101, 13, 78, 200, 534, 47, 1234, 736 }; System.out.println(overHundred(d)); } } //End of class โจทย์ ข้อที่ 18 [ระดับปานกลาง] จงเขียนเมท็อด revStr(…) แบบเวียนเกิดเพื่อกลับตําแหน่ งของอักขระ ทุกตัวในสตริงจากหลังมาหน้ า เช่ น สตริง "Computer" จะได้ เป็ น "retupmoC" เป็ นต้ น (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
11.
Recursion - 11
Computer Programming using Java 155 โจทย์ ข้อที่ 19 [ระดับยาก] จงเขียนเมท็อด formulaAtoB(…)แบบเวียนเกิดเพื่อพิมพ์ สูตรคณตังแม่ a ู ้ จนถึงแม่ b ซึ่งรั บเข้ ามาทางพารามิเตอร์ เช่ น formulaAtoB(6, 15) จะได้ สูตรคณตังแต่ แม่ 6 ถึงแม่ 15 ู ้ เป็ นต้ น (10 คะแนน) โจทย์ ข้อที่ 20 [ระดับยาก] จงเขียนเมท็อด addArray(…) แบบเวียนเกิดเพื่อใช้ สําหรั บหาผลบวกระหว่ าง อาเรย์ หนึ่งมิติ 2 ชุดใดๆ ที่มีจานวนสมาชิกเท่ ากัน แล้ วคืนค่ ากลับ (10 คะแนน) ํ © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
12.
156
Computer Programming using Java 11 - Recursion โจทย์ ข้อที่ 21 [ระดับยาก] จงเขียนเมท็อด isMatrixEquals(…) แบบเวียนเกิดเพื่อรั บเมตริ กซ์ ชนิด จํานวนเต็มเข้ ามา 2 ตัวเพื่อตรวจสอบว่ าเมตริ กซ์ ทังสองเท่ ากันหรื อไม่ โดยขนาดจะต้ องเท่ ากันทังแถว ้ ้ และหลัก และสมาชิกทุกในตําแหน่ งที่ตรงกันต้ องมีค่าเท่ ากัน (10 คะแนน) © สงวนลิขสิทธิ์ พฤศจิกายน 2553 (ปรับปร ุงครังที่ 7 ฉบับใช้ติวภาค 2/2553) เรียบเรียงโดย วงศ์ยศ เกิดศรี (แบงค์) ้
Baixar agora