zoukankan      html  css  js  c++  java
  • 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;
    }

    }

  • 相关阅读:
    php使用iconv进行从utf8转为gb2312字符编码出错解决方案
    PHP 的 cURL库快速入门文档
    转载 DISCUZ!X1程序目录、文件列表及模板文件结构说明,帮助大家二级开发
    下拉菜单部分选项不允许选择
    Htaccess文件用法集锦
    MYSQL server has gone away解决办法
    Discuz X 模板中获取用户头像
    CSS Hack
    VS轻松保存重复多用的代码片段
    三菱FX PLC编程口通讯协议详解
  • 原文地址:https://www.cnblogs.com/Ellfelo/p/CFibonaqi.html
Copyright © 2011-2022 走看看