? C#亚博足球娱乐场注册--任意三数字加yabo.com直达官网之基础为技术之本_重新认识斐波那契数列 亚博足球娱乐场注册,亚博娱乐全天彩,亚博官网赢钱不给
VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 VB.net 2010 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网
SQL Server 2008 视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网 c#入门经典亚博足球娱乐场注册--任意三数字加yabo.com直达官网 Visual Basic从门到精通视频亚博足球娱乐场注册--任意三数字加yabo.com直达官网
当前位置:
首页 > 编程开发 > C#编程 >
  • C#亚博足球娱乐场注册--任意三数字加yabo.com直达官网之基础为技术之本_重新认识斐波那契数列

  • 2019-08-30 14:39 来源:未知
Posted on?2019-08-30 13:46?放羊的白羊座少年?阅读(14) 评论(2)?编辑?收藏

斐波那契数列,是软件人的一位老朋友了,今天我们就来回顾一下教科书上的写法以及这种写法性能上的弊端?有没有更好的写法?

1.首先,教科书的问法是求斐波那契数列的第N项;写一个函数,输入n,求出第N项目。数列定义如下:

?

于是接下来就会引申出递归函数的用法,以及代码(c#)实例:

复制代码
 1 /// 
 2 /// 斐波那契数列低级写法
 3 /// 
 4 /// 输入的目标值
 5 /// 
 6 public int Fibonacci(int targetNumber)
 7 {
 8 //算法开始
 9 if (targetNumber <= 0)
10 return 0;
11 if (targetNumber == 1)
12 return 1;
13 return Fibonacci(targetNumber - 1) + Fibonacci(targetNumber - 2);
14 }
复制代码

?

得出结果并没有任何问题。但是这种写法可靠吗?是我们想要的吗?

我们来分析一下为什么这种写法会有很严重的效率问题。

亚博官网赢钱不给亚博娱乐全天彩亚博足球娱乐场注册 首先我们求解f(10),就需要得到f(9)与f(8),想要求解f(9),势必要求出f(8)与f(7),大家看到了吗?这种重复求解的关系是很糟糕的,并且会随着节点数会随着n的增大而急剧增大。如如下依赖关系图所示:

?

?那我们有没有更好的写法呢?当然有,因为递归与循环本来就是一家人!如下代码(C#)实例:

复制代码
/// 
/// 斐波那契数列高级写法 避免重复计算
/// 
/// 输入的目标值
/// 
public int FibonacciPro(int targetNumber)
{
Stopwatch sw = new Stopwatch();
sw.Start();
//算法开始
int[] arrayBase = {0, 1};
if (targetNumber < 2)
return arrayBase[targetNumber];

int fibNumberOne = 1;
int fibNumberTwo = 0;
int fibCurrentNumber = 0;

for (int i = 2; i <= targetNumber; ++i)
{
fibCurrentNumber = fibNumberOne + fibNumberTwo;
fibNumberTwo = fibNumberOne;
fibNumberOne = fibCurrentNumber;
}

sw.Stop();
TimeSpan ts = sw.Elapsed;
Console.WriteLine("Para is {0},Datatime Costed For Shuffle Function is {1}ms", targetNumber, ts.TotalMilliseconds);
return fibCurrentNumber;
}
复制代码

?

写完了之后我们来看一下性能方面到底是不是节约了很多?

首先,当参数N为10的时候:

这里已经可以初步看到效率有了明显的提升!

当参数N为30的时候,

这里的性能已经有了天翻地覆的差别!

?

?

除此之外,第一种方式的递归还有可能引起严重的栈溢出,每一次调用函数都会在内存栈种分配空间,而每个进程的栈容量是有限的,若第一种解法N参数为5000,则运行时候会出错,但是第二种解法则能得到正确结果。

?


相关亚博足球娱乐场注册--任意三数字加yabo.com直达官网