c#斐波那契数列(Fibonacci)(递归,非递归)实现代码

 更新时间:2020年6月25日 11:41  点击:1871

//Main

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Fibonacci
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Would you like to know which Fibonacci Numbers:");
            int number = Convert.ToInt32(Console.ReadLine());
            //
            Function obj = new Function();
            Console.WriteLine();
            Console.Write("The {0} Fibonacci number is:{1}", number, obj.Fibonacci(number));
            //
            Console.WriteLine();
            Function obj2 = new Function(number);
            Console.Write("The {0} Fibonacci number is:{1}", number, obj2.BottomUpNotRecursion(number));
            //
            Console.WriteLine();
            Console.Write("The {0} Fibonacci number is:{1}", number, obj2.TopDownRecursion(number));
            Console.ReadKey();

        }
    }
}


//Class

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Fibonacci
{
    class Function
    {
        private int[] array;

        public Function()
        {

        }

        /// <summary>
        /// Function
        /// </summary>
        /// <param name="length"></param>
        public Function(int length)
        {
            if (length > 0)
            {
                array = new int[length + 1];
                array[0] = 1;
                array[1] = 1;
            }
            if (length == 0)
            {
                array = new int[1];
                array[0] = 1;
            }
        }

        /// <summary>
        /// Fibonacci数列定义为:
        ///             无穷数列1,1,2,3,5,8,13,21,34,55,……
        ///        ┌ 1             n=0    
        ///   F(n)=│ 1             n=1
        ///        └ F(n-1)+F(n-2) n>1
        /// </summary>
        /// <param name="number">第几个斐波那契数</param>
        /// <returns></returns>
        public int Fibonacci(int number)
        {
            if (number <= 1)
            {
                return 1;
            }
            else
            {
                return Fibonacci(number - 1) + Fibonacci(number - 2);
            }
        }

        /// <summary>
        /// 动态规划思想:
        ///     1.自底向上非递归算法
        /// </summary>
        /// <param name="number"></param>
        /// <returns></returns>
        public int BottomUpNotRecursion(int number)
        {
            int copynumber = 0;
            if (number < 2)
            {
                copynumber = 1;
            }
            else
            {
                int one = array[0];
                int two = array[1];

                for (int i = 2; i < array.Length; i++)
                {
                    array[i] = one + two;
                    one = two;
                    two = array[i];
                    copynumber = array[i];
                }
            }

            return copynumber;
        }

        /// <summary>
        ///     2.自顶向下递归算法
        /// </summary>
        /// <param name="number"></param>
        /// <returns></returns>
        public int TopDownRecursion(int number)
        {
            if (number <= 2)
            {
                if (number == 0)
                    return array[0];
                if (number == 1)
                    return array[1];
                if (number == 2)
                    return array[2] = array[0] + array[1];
            }
            else
            {
                //递归只是一个“牵引线”,目的是为了让数组储存值。
                TopDownRecursion(number - 1);
                array[number] = array[number - 1] + array[number - 2];
            }
            return array[number];
        }
    }
}

截图

[!--infotagslink--]

相关文章

  • 经典实例讲解C#递归算法

    这篇文章主要用实例讲解C#递归算法的概念以及用法,文中代码非常详细,帮助大家更好的参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • C#实现斐波那契数列的几种方法整理

    这篇文章主要介绍了C#实现斐波那契数列的几种方法整理,主要介绍了递归,循环,公式和矩阵法等,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C++实现递归函数的方法

    在本篇内容里小编给大家分享了关于C++实现递归函数的教学步骤,需要的朋友跟着参考下。...2020-04-25
  • C++递归删除一个目录实例

    这篇文章主要介绍了C++递归删除一个目录的实现方法,涉及到目录的操作及递归算法的应用,需要的朋友可以参考下...2020-04-25
  • JavaScript输出斐波那契数列的实现方法

    斐波那契数列来源于兔子繁殖问题,所以也叫兔子序列,下面这篇文章主要给大家介绍了关于JavaScript输出斐波那契数列的实现方法,需要的朋友可以参考下...2021-06-27
  • C语言之整数划分问题(递归法)实例代码

    这篇文章主要介绍了C语言之整数划分问题(递归法)实例代码的相关资料,需要的朋友可以参考下...2020-04-25
  • C++输出斐波那契数列的两种实现方法

    以下是对C++中输出斐波那契数列的两种实现方法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-04-25
  • C#递归实现显示文件夹及所有文件并计算其大小的方法

    这篇文章主要介绍了C#递归实现显示文件夹及所有文件并计算其大小的方法,是遍历算法中比较典型的一种应用,有不错的学习借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#笔试题之同线程Lock语句递归不会死锁

    这篇文章主要介绍了C$ 笔试题之同线程Lock语句递归不会死锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • python 非递归解决n皇后问题的方法

    这篇文章主要介绍了python 非递归解决n皇后问题的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-16
  • C语言数据结构递归之斐波那契数列

    这篇文章主要介绍了C语言数据结构递归之斐波那契数列的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下...2020-04-25
  • Java中的什么场景使用递归,如何使用递归

    这篇文章主要介绍了Java中的什么场景使用递归,如何使用递归的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-03
  • 使用递归实现数组求和示例分享

    这篇文章主要介绍了使用递归实现数组求和示例,思路是给定一个含有n个元素的整型数组a,求a中所有元素的和,需要的朋友可以参考下...2020-06-25
  • 使用dom4j递归解析节点内还含有多个节点的xml

    这篇文章主要介绍了使用dom4j递归解析节点内还含有多个节点的xml,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • 如何利用Java递归解决“九连环”公式

    这篇文章主要给大家介绍了关于如何利用Java递归解决“九连环”公式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21
  • thinkphp实现无限分类(使用递归)

    这篇文章主要介绍了在使用递归的情况下thinkphp实现无限分类,感兴趣的小伙伴们可以参考一下...2015-12-21
  • C#函数式编程中的递归调用之尾递归详解

    这篇文章主要介绍了C#函数式编程中的递归调用详解,本文讲解了什么是尾递归、尾递归的多种方式、尾递归的代码实例等内容,需要的朋友可以参考下...2020-06-25
  • C#递归实现回文判断算法

    这篇文章主要介绍了C#递归实现回文判断算法,方法简单实用,需要的朋友可以参考下...2020-06-25
  • array_map实现递归功能

    本文章来给大家介绍array_map实现递归功能,各位有需要了解的朋友可参考。 array_map(callback, arr1, arr2&hellip;&hellip;);函数返回用户自定义回调函数执行后...2016-11-25
  • C语言数据结构之二叉树的非递归后序遍历算法

    这篇文章主要介绍了C语言数据结构之二叉树的非递归后序遍历算法的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下...2020-04-25