C# 最快的逐一打印斐波那契结果数列的算法

 

 

用这种方法就无需将数列中的每一个元素都计算一遍了!

说多无谓,直接上代码吧!

private void button5_Click(object sender, EventArgs e)
{
  FiBoNaQi f = new FiBoNaQi();
  f.numberToCount = (Int16)numericUpDown1.Value;
  f.DoFiBoNaQi((Int16)numericUpDown1.Value);
  MessageBox.Show(f.StrResult);
}

class FiBoNaQi
{
  StringBuilder strResult = new StringBuilder();
  //用于推算已经加入到字符串结果中的数,以免重复打印

int nowPercent = 0;
//斐波那契number
public int numberToCount = 0;
public long DoFiBoNaQi(int count)
{
  long result = 0;

  if (count == 1)
  {
    result = 1L;
  }
  //必须考虑这种情况,否则如果numberToCount是偶数的时候将漏打1的结果
  //如果不考虑0,那么number是1或2的时候就将结果返回来了,如果number是偶数
  //先执行DoFiBoNaQi(count - 1),马上返回number为2的结果,用于这个条件 if (percent > nowPercent)
  //的限制,1的结果就返回不了了(或者说加入到结构字符串中)
  else if (count == 0)
  {
    result = 0L;
  }
  else
  {
    //只要return,函数就不会继续下探导致无限循环内存溢出。如果不考虑0,注意2和1的顺序。
    result = DoFiBoNaQi(count - 1) + DoFiBoNaQi(count - 2);
    //result = DoFiBoNaQi(count - 2) + DoFiBoNaQi(count - 1);
  }
  //罗列出来,这里也算0的,但是直接return 0,资源消耗不大,没关系
  int percent = (int)((double)count / (double)numberToCount * 100);
  //零是无法返回的,可以重写一下
  if (percent > nowPercent)
  {
    nowPercent = percent;
    strResult.Append(result + "\t");
    if (count % 5 == 5)
    strResult.Append("\t\n");
  }
  return result;
}

}

转载于:https://www.cnblogs.com/Ellfelo/archive/2013/01/22/CFibonaqi.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值