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

โปรแกรม C++ เพื่อแสดง Fibonacci Series


อนุกรมฟีโบนักชีประกอบด้วยตัวเลขซึ่งแต่ละเทอมเป็นผลรวมของสองเทอมก่อนหน้า สิ่งนี้สร้างลำดับจำนวนเต็มต่อไปนี้ -

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377…….

ความสัมพันธ์ซ้ำที่กำหนดตัวเลขฟีโบนักชีมีดังนี้ −

F(n) = F(n-1) + F(n-2) F(0)=0 F(1)=1

โปรแกรมแสดงอนุกรมฟีโบนักชี

มีสองวิธีในการแสดงชุดฟีโบนักชี นั่นคือ การใช้โปรแกรมไดนามิกและการเขียนโปรแกรมแบบเรียกซ้ำ อธิบายเพิ่มเติมได้ดังนี้ −

การเขียนโปรแกรมแบบไดนามิก

ตัวอย่าง

#include<iostream>
using namespace std;
void fib(int n) {
   int f[n];
   int i;
   f[0] = 0;
   f[1] = 1;
   for (i = 2; i < n; i++) {
      f[i] = f[i-1] + f[i-2];
   }
   for (i = 0; i < n; i++) {
      cout<<f[i]<<" ";
   }
}
int main () {
   int n = 10;
   fib(n);
   getchar();
   return 0;
}

ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้

ผลลัพธ์

0 1 1 2 3 5 8 13 21 34

ในโปรแกรม main() คือฟังก์ชันไดรเวอร์ รหัสจริงสำหรับการสร้างชุดฟีโบนักชีถูกเก็บไว้ในฟังก์ชัน fib() ซึ่งเรียกจาก main

อาร์เรย์ f[n] ถูกสร้างขึ้นซึ่งจะเก็บ n เทอมแรกของอนุกรมฟีโบนักชี องค์ประกอบที่หนึ่งและที่สองของอาร์เรย์นี้เริ่มต้นเป็น 0 และ 1 ตามลำดับ

f[0] = 0;
f[1] = 1;

จากนั้น for loop จะใช้เก็บแต่ละองค์ประกอบในอาร์เรย์เป็นผลรวมของสององค์ประกอบก่อนหน้า

for (i = 2; i < n; i++) {
   f[i] = f[i-1] + f[i-2];
}

ในที่สุด อนุกรมฟีโบนักชีก็ปรากฏขึ้น

for (i = 0; i < n; i++) {
   cout<<f[i]<<" ";
}

การเขียนโปรแกรมแบบเรียกซ้ำ

ให้เราดูวิธีแสดงชุดฟีโบนักชีโดยใช้การเรียกซ้ำ

ตัวอย่าง

#include<iostream>
using namespace std;
int fib(int n) {
   if (n <= 1)
   return n;
   return fib(n-1) + fib(n-2);
}
int main () {
   int n = 10, i;
   for(i=0;i<n;i++)
   cout<<fib(i)<<" ";
   return 0;
}

ผลลัพธ์

0 1 1 2 3 5 8 13 21 34

ในโปรแกรมข้างต้น มีการตั้งค่า for loop ที่สร้างแต่ละเทอมของอนุกรม fibonacci โดยใช้การเรียกซ้ำ ทำได้โดยการเรียกใช้ฟังก์ชัน fib() สำหรับแต่ละเทอมในอนุกรม

for(i=0;i<n;i++)
cout<<fib(i)<<" ";

ฟังก์ชัน fib() คืนค่า 0 หรือ 1 ถ้า n เป็น 0 หรือ 1 ตามลำดับ หากไม่เป็นเช่นนั้น จะเรียกตัวเองซ้ำว่าเป็นผลรวมของสองเทอมก่อนหน้าจนกว่าจะได้ค่าที่ถูกต้องคืน

if (n <= 1)
return n;
return fib(n-1) + fib(n-2);