斐波那契係數和斐波那契三角形


在本文中,我們將討論一種特殊的數字,稱為斐波那契係數,以及斐波那契三角形的形狀。我們還將討論使用 C++ 程式碼列印給定高度的斐波那契三角形的方法。

讓我們首先討論什麼是斐波那契係數。

斐波那契係數

我們可以將斐波那契係數稱為眾所周知的術語(即斐波那契數和二項式係數)的推廣。

斐波那契數是一個數列,其中每個數字都是前兩個數字的和(例如 - 0、1、1、2、3、5、8、13、21)

另一方面,二項式係數源自二項式定理,表示二項式表示式展開中的係數(例如,(a + b)^n)。

結合這兩個概念,斐波那契係數可以指與斐波那契數和二項式係數相關的展開中的係數。

簡單來說,斐波那契係數是一種計算從 n 個不同元素的集合中選擇 k 個不同元素的方法數的方式,其中每個元素的權重基於其在斐波那契數列中的位置。

以下是一個更好的示例 -

假設我們有一系列 5 個不同的數字,即 {A、B、C、D、E}。我們想從這個集合中選擇 3 個元素,考慮它們的順序,並根據斐波那契數列為每個元素分配權重。斐波那契係數將告訴我們執行此操作的可能方法數。

首先,我們找到對應位置的斐波那契數 -

F(5) = 5
F(3) = 2
F(2) = 1

接下來,我們使用斐波那契係數公式:F(n, k) = F(n) / (F(k) * F(n−k)) 代入值 -

F(5, 3) = F(5) / (F(3) * F(5-3))
= 5 / (2 * 1)
= 5 / 2
= 2.5

因此,從集合 {A、B、C、D、E} 中選擇 3 個元素,考慮它們的順序,併為每個元素分配基於斐波那契的權重,有 2.5 種可能的方法。

斐波那契三角形

現在讓我們討論斐波那契三角形及其形成方式。

在斐波那契三角形的上下文中,斐波那契係數結合了斐波那契數和二項式係數。三角形中的每個條目都表示一個係數,該係數源自斐波那契表示式的展開,該表示式結合了斐波那契數和二項式係數。

斐波那契三角形是數字的三角形排列,表示斐波那契係數。類似於帕斯卡三角形表示二項式係數,斐波那契三角形顯示了不同 n 和 k 值的斐波那契係數。

要構造斐波那契三角形,我們使用斐波那契係數公式計算三角形中的每個數字:F(n, k) = F(n) / (F(k) * F(n−k))。三角形中特定位置 (n, k) 的斐波那契係數是透過將第 n 個斐波那契數除以第 k 個和第 (n−k) 個斐波那契數的乘積得到的。

斐波那契三角形在排列和係數計算方面與帕斯卡三角形有相似之處,但它展示的是斐波那契係數,而不是二項式係數。

以下是一個斐波那契三角形的示例 -

                    1
                 1     1
              1     2     1
           1     3     3     1
        1     5     6     5     1
     1     8    11    11    8      1

在這個三角形中,每個數字都表示一個斐波那契係數,結合了斐波那契數和二項式係數的屬性。

問題陳述

我們有一項任務,需要使用 C++ 生成斐波那契三角形。

示例

以下是上述方法在不同程式語言(C、C++、Java 和 Python)中的實現 -

#include<stdlib.h>
#include<stdio.h>
#define number 6
void fib(int number_fib[], int n)
{
   number_fib[0] = 0;
   number_fib[1] = 1;
   for (int iterator = 2; iterator <= n; iterator++)
      number_fib[iterator] = number_fib[iterator - 1] + number_fib[iterator - 2];
}
void fibonomialCoeff(int fib_coeff[][number + 1], int number_fib[], int n){
   for (int iterator = 0; iterator <= n; iterator++)
      fib_coeff[iterator][0] = 1;
   for (int iterator = 1; iterator <= n; iterator++) {
      for (int j = 1; j <= iterator; j++) {
         int k = j;
         while (k--)
            fib_coeff[iterator][j] *= number_fib[k];
         k = 1;
         while ((j + 1) != k)
            fib_coeff[iterator][j] /= number_fib[k++];
      }
   }
}
void printFibonomialTriangle(int n){
   int j = 0;
   int iterator = 0;
   int number_fib[number + 1] = { 0 };
   fib(number_fib, n);
   int fib_coeff[number + 1][number + 1] = { 0 };
   for (iterator = 0; iterator <= n; iterator++)
      fib_coeff[iterator][0] = fib_coeff[iterator][iterator] = 1;
   for (iterator = 1; iterator <= n; iterator++) {
      for (j = 1; j < iterator; j++)
         fib_coeff[iterator][j] = number_fib[iterator - j + 1] * fib_coeff[iterator - 1][j - 1] + number_fib[j - 1] * fib_coeff[iterator - 1][j];
   }
   for (iterator = 0; iterator <= n; iterator++) {
      for (j = 0; j <= iterator; j++)
         printf("%d ", fib_coeff[iterator][j]);
      printf("\n");
   }
}
int main(){
   printf("The Fibonomial triangle of height = 6 is given here \n");
   printFibonomialTriangle(number);
   return 0;
}

輸出

The Fibonomial triangle of height = 6 is given here 
1 
1 1 
1 1 1 
1 2 2 1 
1 3 6 3 1 
1 5 15 15 5 1 
1 8 40 60 40 8 1 
#include<bits/stdc++.h>
using namespace std;
#define number 6

void fib(int number_fib[], int n){
   number_fib[0] = 0;
   number_fib[1] = 1;
   for (int iterator = 2; iterator <= n; iterator++)
   number_fib[iterator] = number_fib[iterator - 1] + number_fib[iterator - 2];
}
void fibonomialCoeff(int fib_coeff[][number + 1], int number_fib[], int n){
   for (int iterator = 0; iterator <= n; iterator++)
   fib_coeff[iterator][0] = 1;
   for (int iterator = 1; iterator <= n; iterator++) {
      for (int j = 1; j <= iterator; j++) {
         int k = j;
         while (k--)
         fib_coeff[iterator][j] *= number_fib[k];
         k = 1;
         while ((j + 1) != k)
         fib_coeff[iterator][j] /= number_fib[k++];
      }
   }
}
void printFibonomialTriangle(int n){
   int j = 0;
   int iterator = 0;
   int number_fib[number + 1] = { 0 };
   fib(number_fib, n);
   int fib_coeff[number + 1][number + 1] = { 0 };
   for (iterator = 0; iterator <= n; iterator++)
   fib_coeff[iterator][0] = fib_coeff[iterator][iterator] = 1;
   for (iterator = 1; iterator <= n; iterator++) {
      for (j = 1; j < iterator; j++)
         fib_coeff[iterator][j] = number_fib[iterator - j + 1] * fib_coeff[iterator - 1][j - 1] + number_fib[j - 1] * fib_coeff[iterator - 1][j];
   }
   for (iterator = 0; iterator <= n; iterator++) {
      for (j = 0; j <= iterator; j++)
         cout << fib_coeff[iterator][j] << " ";
      cout << endl;
   }
}
int main(){
   cout << "The Fibonomial triangle of height = 6 is given here" << endl;
   printFibonomialTriangle(number);
   return 0;
}

輸出

The Fibonomial triangle of height = 6 is given here
1 
1 1 
1 1 1 
1 2 2  1 
1 3 6  3  1 
1 5 15 15 5  1 
1 8 40 60 40 8 1
public class Main {
   static final int number = 6;

   static void fib(int[] number_fib, int n) {
      number_fib[0] = 0;
      number_fib[1] = 1;
      for (int iterator = 2; iterator <= n; iterator++)
         number_fib[iterator] = number_fib[iterator - 1] + number_fib[iterator - 2];
   }

   static void fibonomialCoeff(int[][] fib_coeff, int[] number_fib, int n) {
      for (int iterator = 0; iterator <= n; iterator++)
         fib_coeff[iterator][0] = 1;
      for (int iterator = 1; iterator <= n; iterator++) {
         for (int j = 1; j <= iterator; j++) {
            int k = j;
            while (k-- > 0)
               fib_coeff[iterator][j] *= number_fib[k];
            k = 1;
            while ((j + 1) != k)
               fib_coeff[iterator][j] /= number_fib[k++];
         }
      }
   }

   static void printFibonomialTriangle(int n) {
      int j = 0;
      int iterator = 0;
      int[] number_fib = new int[number + 1];
      fib(number_fib, n);
      int[][] fib_coeff = new int[number + 1][number + 1];
      for (iterator = 0; iterator <= n; iterator++)
         fib_coeff[iterator][0] = fib_coeff[iterator][iterator] = 1;
      for (iterator = 1; iterator <= n; iterator++) {
         for (j = 1; j < iterator; j++)
            fib_coeff[iterator][j] = number_fib[iterator - j + 1] * fib_coeff[iterator - 1][j - 1] + number_fib[j - 1] * fib_coeff[iterator - 1][j];
      }
      for (iterator = 0; iterator <= n; iterator++) {
         for (j = 0; j <= iterator; j++)
            System.out.print(fib_coeff[iterator][j] + " ");
         System.out.println();
      }
   }
   public static void main(String[] args) {
      System.out.println("The Fibonomial triangle of height = 6 is given here ");
      printFibonomialTriangle(number);
   }
}

輸出

The Fibonomial triangle of height = 6 is given here 
1 
1 1 
1 1 1 
1 2 2 1 
1 3 6 3 1 
1 5 15 15 5 1 
1 8 40 60 40 8 1 
def fib(number_fib, n):
   number_fib[0] = 0
   number_fib[1] = 1
   for iterator in range(2, n + 1):
      number_fib[iterator] = number_fib[iterator - 1] + number_fib[iterator - 2]

def fibonomialCoeff(fib_coeff, number_fib, n):
   for iterator in range(n + 1):
      fib_coeff[iterator][0] = 1
   for iterator in range(1, n + 1):
      for j in range(1, iterator + 1):
         k = j
         while k > 0:
            fib_coeff[iterator][j] *= number_fib[k - 1]
            k -= 1
         k = 1
         while j + 1 != k:
            fib_coeff[iterator][j] /= number_fib[k - 1]
            k += 1

def printFibonomialTriangle(n):
   j = 0
   iterator = 0
   number_fib = [0] * (n + 1)  # Fix: Use 'n' instead of 'number'
   fib(number_fib, n)
   fib_coeff = [[0] * (n + 1) for _ in range(n + 1)]  # Fix: Use 'n' instead of 'number'
   for iterator in range(n + 1):
      fib_coeff[iterator][0] = fib_coeff[iterator][iterator] = 1
   for iterator in range(1, n + 1):
      for j in range(1, iterator):
         fib_coeff[iterator][j] = number_fib[iterator - j] * fib_coeff[iterator - 1][j - 1] + number_fib[j - 1] * fib_coeff[iterator - 1][j]
   for iterator in range(n + 1):
      for j in range(iterator + 1):
         print(fib_coeff[iterator][j], end=" ")
      print()

if __name__ == "__main__":
   number = 6  # Define 'number' here
   print("The Fibonomial triangle of height = 6 is given here ")
   printFibonomialTriangle(number)

輸出

The Fibonomial triangle of height = 6 is given here 
1 
1 1 
1 1 1 
1 1 2 1 
1 2 3 3 1 
1 3 7 6 5 1 
1 5 16 20 16 8 1  

複雜度 - 上述程式碼的時間和空間複雜度均為 O (n^2)。

結論

在本文中,我們學習了斐波那契係數和斐波那契三角形,最後我們生成了使用 C++ 生成斐波那契三角形的程式碼。

更新於: 2024年2月9日

75 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.