C#,广义斐波那契数(Generalised Fibonacci Numbers)的算法

广义斐波那契序列(generalized Fibonacci sequence)是斐波那契数的推广。由递推关系F₁=F₂=…=Fm-1=0,Fₘ=1,Fm+n=Fₙ+Fn+1+…+Fn+m+1,n≥1所产生的序列,称为m级广义斐波那契序列。
 

计算结果:

源代码:

1 文本格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// 广义斐波那契数
    /// Generalised Fibonacci Numbers
    /// </summary>
    public static partial class Number_Sequence
    {
        /// <summary>
        /// 广义斐波那契数的算法
        /// </summary>
        /// <param name="N"></param>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="m"></param>
        /// <param name="n"></param>
        /// <returns></returns>
        public static int Generalized_Fibonacci_Number(int N, int a, int b, int m, int n)
        {
            int[,] F = { { m, 1 }, { n, 0 } };
            if (N == 0)
            {
                return a;
            }
            if (N == 1)
            {
                return b;
            }
            if (N == 2)
            {
                return m * b + n * a;
            }
            int[,] initial = { { m * b + n * a, b }, { b, a } };
            GFN_Power(ref F, N - 2, m, n);
            Fib_Multiply(ref initial, F);
            return F[0, 0];
        }

        /// <summary>
        /// 2x2矩阵乘法
        /// </summary>
        /// <param name="F"></param>
        /// <param name="M"></param>
        static void Fib_Multiply(ref int[,] F, int[,] M)
        {
            int x = F[0, 0] * M[0, 0] + F[0, 1] * M[1, 0];
            int y = F[0, 0] * M[0, 1] + F[0, 1] * M[1, 1];
            int z = F[1, 0] * M[0, 0] + F[1, 1] * M[1, 0];
            int w = F[1, 0] * M[0, 1] + F[1, 1] * M[1, 1];

            F[0, 0] = x;
            F[0, 1] = y;
            F[1, 0] = z;
            F[1, 1] = w;
        }

        private static void GFN_Power(ref int[,] F, int N, int m, int n)
        {
            int[,] M = { { m, 1 }, { n, 0 } };
            for (int i = 1; i <= N; i++)
            {
                Fib_Multiply(ref F, M);
            }
        }
    }
}
 

——————————————————

POWER BY TRUFFER.CN

2 代码格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// 广义斐波那契数
    /// Generalised Fibonacci Numbers
    /// </summary>
    public static partial class Number_Sequence
    {
        /// <summary>
        /// 广义斐波那契数的算法
        /// </summary>
        /// <param name="N"></param>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <param name="m"></param>
        /// <param name="n"></param>
        /// <returns></returns>
        public static int Generalized_Fibonacci_Number(int N, int a, int b, int m, int n)
        {
            int[,] F = { { m, 1 }, { n, 0 } };
            if (N == 0)
            {
                return a;
            }
            if (N == 1)
            {
                return b;
            }
            if (N == 2)
            {
                return m * b + n * a;
            }
            int[,] initial = { { m * b + n * a, b }, { b, a } };
            GFN_Power(ref F, N - 2, m, n);
            Fib_Multiply(ref initial, F);
            return F[0, 0];
        }

        /// <summary>
        /// 2x2矩阵乘法
        /// </summary>
        /// <param name="F"></param>
        /// <param name="M"></param>
        static void Fib_Multiply(ref int[,] F, int[,] M)
        {
            int x = F[0, 0] * M[0, 0] + F[0, 1] * M[1, 0];
            int y = F[0, 0] * M[0, 1] + F[0, 1] * M[1, 1];
            int z = F[1, 0] * M[0, 0] + F[1, 1] * M[1, 0];
            int w = F[1, 0] * M[0, 1] + F[1, 1] * M[1, 1];

            F[0, 0] = x;
            F[0, 1] = y;
            F[1, 0] = z;
            F[1, 1] = w;
        }

        private static void GFN_Power(ref int[,] F, int N, int m, int n)
        {
            int[,] M = { { m, 1 }, { n, 0 } };
            for (int i = 1; i <= N; i++)
            {
                Fib_Multiply(ref F, M);
            }
        }
    }
}

相关推荐

  1. C++ 509.

    2024-01-28 12:42:02       29 阅读
  2. 2024-01-28 12:42:02       31 阅读
  3. C/C++---------------LeetCode第509.

    2024-01-28 12:42:02       45 阅读
  4. Leetcode509——C语言)

    2024-01-28 12:42:02       29 阅读
  5. 509.

    2024-01-28 12:42:02       63 阅读
  6. Leetcode 509

    2024-01-28 12:42:02       46 阅读
  7. LC509.

    2024-01-28 12:42:02       49 阅读
  8. 509.

    2024-01-28 12:42:02       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-28 12:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-28 12:42:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-28 12:42:02       82 阅读
  4. Python语言-面向对象

    2024-01-28 12:42:02       91 阅读

热门阅读

  1. 2023华为od机试C卷【跳马问题】C语言 实现

    2024-01-28 12:42:02       47 阅读
  2. 【算法题】72. 编辑距离

    2024-01-28 12:42:02       41 阅读
  3. LLVM编译器的结构

    2024-01-28 12:42:02       52 阅读
  4. 计算机网络概述及 参考模型

    2024-01-28 12:42:02       57 阅读
  5. 关于CMAKE构建C/C++遇到的问题汇总

    2024-01-28 12:42:02       60 阅读
  6. 栈的基础知识

    2024-01-28 12:42:02       49 阅读
  7. perl 通过信号控制执行超时

    2024-01-28 12:42:02       56 阅读
  8. 设计模式 :总结篇

    2024-01-28 12:42:02       62 阅读
  9. Spring Cloud Sleuth与Zipkin详解

    2024-01-28 12:42:02       67 阅读