509.斐波那契数

  1. 509.斐波那契数
    1. 509.1 题目
    2. 509.2 题解
      1. 递归
      2. 迭代
    3. 509.3 代码
    4. 509.4 运行结果

509.斐波那契数


509.1 题目

斐波那契数(通常用 F(n) 表示)形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

  • F(0) = 0
  • F(1) = 1
  • F(n) = F(n - 1) + F(n - 2),其中 n > 1

给定 n,请计算 F(n)

示例 1:

输入:n = 2
输出:1
解释:F(2) = F(1) + F(0) = 1 + 0 = 1

示例 2:

输入:n = 3
输出:2
解释:F(3) = F(2) + F(1) = 1 + 1 = 2

示例 3:

输入:n = 4
输出:3
解释:F(4) = F(3) + F(2) = 2 + 1 = 3

提示:

  • 0 <= n <= 30

509.2 题解

递归

// 方法一:递归
static int Fib1(int n)
{
    // 如果 n 小于等于 1,直接返回 n,作为基准情况
    if (n <= 1)
    {
        return n;
    }
    else
    {
        // 递归调用 Fibonacci1 函数,计算 F(n) = F(n-1) + F(n-2)
        return Fib1(n - 1) + Fib1(n - 2);
    }
}

迭代

// 方法二:迭代
static int Fib2(int n)
{
    // 如果 n 小于等于 1,直接返回 n,作为基准情况
    if (n <= 1)
    {
        return n;
    }

    // 初始化一个数组 fib 来存储斐波那契数列的结果
    int[] fib = new int[n + 1];
    fib[0] = 0; // F(0) 的初始值为 0
    fib[1] = 1; // F(1) 的初始值为 1

    // 使用循环迭代计算 F(i) = F(i-1) + F(i-2) 的值,将结果存储在数组 fib 中
    for (int i = 2; i <= n; i++)
    {
        fib[i] = fib[i - 1] + fib[i - 2];
    }

    // 返回计算结果,即 F(n)
    return fib[n];
}

509.3 代码

using System;

class Program
{
    static void Main()
    {
        #region 题目

        // 斐波那契数列计算
        // 给定 n ,计算 F(n)。

        // 示例 1:
        // 输入:n = 2
        // 输出:1
        // 解释:F(2) = F(1) + F(0) = 1 + 0 = 1

        // 示例 2:
        // 输入:n = 3
        // 输出:2
        // 解释:F(3) = F(2) + F(1) = 1 + 1 = 2

        // 示例 3:
        // 输入:n = 4
        // 输出:3
        // 解释:F(4) = F(3) + F(2) = 2 + 1 = 3

        #endregion

        #region 测试

        // 示例 1
        int n1 = 2;
        int result1 = Fib1(n1);
        Console.WriteLine($"示例1 方法1 输出:{result1}");
        int result1_2 = Fib2(n1);
        Console.WriteLine($"示例1 方法2 输出:{result1_2}");

        // 示例 2
        int n2 = 3;
        int result2 = Fib1(n2);
        Console.WriteLine($"示例2 方法1 输出:{result2}");
        int result2_2 = Fib2(n2);
        Console.WriteLine($"示例2 方法2 输出:{result2_2}");

        // 示例 3
        int n3 = 4;
        int result3 = Fib1(n3);
        Console.WriteLine($"示例3 方法1 输出:{result3}");
        int result3_2 = Fib2(n3);
        Console.WriteLine($"示例3 方法2 输出:{result3_2}");

        #endregion
    }

    #region 答案

    // 方法一:递归
    static int Fib1(int n)
    {
        // 如果 n 小于等于 1,直接返回 n,作为基准情况
        if (n <= 1)
        {
            return n;
        }
        else
        {
            // 递归调用 Fibonacci1 函数,计算 F(n) = F(n-1) + F(n-2)
            return Fib1(n - 1) + Fib1(n - 2);
        }
    }

    // 方法二:迭代
    static int Fib2(int n)
    {
        // 如果 n 小于等于 1,直接返回 n,作为基准情况
        if (n <= 1)
        {
            return n;
        }

        // 初始化一个数组 fib 来存储斐波那契数列的结果
        int[] fib = new int[n + 1];
        fib[0] = 0; // F(0) 的初始值为 0
        fib[1] = 1; // F(1) 的初始值为 1

        // 使用循环迭代计算 F(i) = F(i-1) + F(i-2) 的值,将结果存储在数组 fib 中
        for (int i = 2; i <= n; i++)
        {
            fib[i] = fib[i - 1] + fib[i - 2];
        }

        // 返回计算结果,即 F(n)
        return fib[n];
    }

    #endregion
}

509.4 运行结果

示例1 方法1 输出:1
示例1 方法2 输出:1
示例2 方法1 输出:2
示例2 方法2 输出:2
示例3 方法1 输出:3
示例3 方法2 输出:3


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏