ในปัญหาที่กำหนด เราได้รับจำนวนเต็ม n เราต้องหา Pn คือ เลข Pell ในตำแหน่ั้นั้น ตอนนี้ เรารู้ว่าเลข Pell เป็นส่วนหนึ่งของอนุกรมที่กำหนดโดยสูตรนี้:
Pn = 2×Pn-1 + Pn-2
ด้วยตัวเลขเริ่มต้นสองตัว:
P0 = 0 และ P1 = 1
วิธีการแก้ปัญหา
ตอนนี้เราจะแก้ปัญหานี้ด้วยสองวิธี: แบบ Recursive (เรียกซ้ำ) และ Iterative (วนซ้ำ)
วิธี Recursive (เรียกซ้ำ)
ในสูตรนี้ เราจะนำสูตรของเลข Pell ไปใช้แบบเรียกซ้ำ และทำ n รอบ
ตัวอย่าง
#include <iostream>
using namespace std;
int pell(int n) {
if(n <= 2)
return n;
return 2*pell(n-1) + pell(n-2);
}
int main() {
int n = 6; // n ที่กำหนด
cout << pell(n) << "\n"; // เลข Pell ในตำแหน่ั้นั้น
return 0;
}
ผลลัพธ์
70
คำอธิบายโค้ด
ในวิธีนี้ เราใช้การเรียกซ้ำโดยเรียก pell(n-1) && pell(n-2) จนกว่า n จะน้อยกว่าหรือเท่ากับ 2 เนื่องจากเรารู้ว่าเลข Pell จนถึง 2 เท่ากับตัวเลขที่กำหนด ความซับซ้อนด้านเวลาทั้งหมดของโปรแกรมข้างต้นคือ O(N) โดยที่ N คือตัวเลขที่กำหนด
วิธี Iterative (วนซ้ำ)
ในวิธีนี้ เราจะใช้สูตรเดียวกับข้างต้น แต่คำนวณตัวเลขโดยใช้ for loop แทนฟังก์ชันเรียกซ้ำ
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int n = 6; // n ที่กำหนด
int p0 = 0; // ค่าเริ่มต้นของ pn-2
int p1 = 1; // ค่าเริ่มต้นของ pn-1
int pn; // คำตอบของเรา
if(n <= 2) // ถ้า n <= 2 เราพิมพ์ n
cout << n << "\n";
else {
for(int i = 2; i <= n; i++) { // เราจะหาตั้งแต่ตัวที่สองจนถึง n
pn = 2*p1 + p0;
p0 = p1; // pn-1 กลายเป็น pn-2 สำหรับ i ใหม่
p1 = pn; // pn กลายเป็น pn-1 สำหรับ i ใหม่
}
cout << pn << "\n";
}
return 0;
}
ผลลัพธ์
70
คำอธิบายโค้ด
ในโปรแกรมที่กำหนด เรากำลังเดินทางจาก 2 ถึง n และเพียงแค่อัปเดตค่าสำหรับ pn-2 เป็น pn-1 และ pn-1 เป็น pn จนกว่าจะถึง n
สรุป
ในบทความนี้ เราแก้ปัญหาการหาเลข Pell ตัวที่ N โดยใช้การเรียกซ้ำและการวนซ้ำ เรายังเรียนรู้โปรแกรม C++ สำหรับปัญหานี้และวิธีการแก้ปัญหาแบบเต็มรูปแบบ (ธรรมดาและมีประสิทธิภาพ) ที่เราใช้แก้ปัญหานี้ เราสามารถเขียนโปรแกรมเดียวกันในภาษาอื่นๆ เช่น C, Java, Python และภาษาอื่นๆ ได้