斐波那契系数和斐波那契三角形


在本文中,我们将讨论一种特殊的数字,称为斐波那契系数,以及斐波那契三角形的形状。我们还将讨论使用 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.