• 递归算法


    public static int Foo(int i)
    {
    if (i <= 0)
    return 0; // 小于0 的返回0
    else if(i > 0 && i <= 2)
    return 1; // 前两位数都是1
    else return Foo(i -1) + Foo(i - 2); // 从第三位数开始
    等于前两位的和,如果i-1位数是第一位或者第二位数就返回1 如果不是继续返回为前两位的和一直到是1为止,然后依次将其后的一个数算出来,最终算到你设置的地方 第30个数字。

    我的理解是 调用这个方法运算到这的时候如果需要递归,就再次调用自己,其实你最初调用的方法就一直停在了 else return Foo(i -1) + Foo(i - 2);
    这个位置,新调用的方法也是这么算 如果到了这里else return Foo(i -1) + Foo(i - 2); 也是停在这继续再调用这个方法,知道不再调用了,再一步步的返回一个值,直到你第一次调用的地方,就把你要的值求出来了

    递归嘛,可以看做第一次到这就停了,这个数再用这个方法去算,一层层的算下去直到出来数字1就是这个方法到不了这,而是直接返回一个数的时候,在一层层的倒退算回去,最终就算到你第一次调用的时候了,也就是30的时候
    }
    }
    i30=i29+i28
    i29=i28+i27  i28=i27+i26
    i28=i27+i26  i27=i26+i25  i27=i26+i25  i26=i25+i24
    ....
    .....
    ......
    i3=i2+i1=1+1=2 ......

    -_-~ 斐布那契数列?? 不知道字对不对

    了解这个数列就知道

    i=1  x1=1
    i=2  x2=1
    i=3  x3=x1+x2
    i=4  x4=x2+x3
    ....
    i=n xn=x(n-1)+x(n-2)
    数列的模式就是这样了

    换句话来说,第N个值是它前两个值的和

    Foo(int i) 求i=n时的值,简写Foo(n)
    它的结果为 Foo(n) = Foo(n-1)+Foo(n-2)
    同理
    Foo(n-1) = Foo(n-2)+Foo(n-3)
    Foo(n-2) = Foo(n-3)+Foo(n-4)

    通理解嘛...

            #region 递归搜索目录,历遍文件
            /// <summary>
            /// 递归搜索目录,历遍文件
            /// </summary>
            /// <param name="sDir">目录名</param>
            void DirSearch(string sDir)
            {
                try
                {
                    foreach (string d in Directory.GetDirectories(sDir))
                    {
                        foreach (string f in Directory.GetFiles(d))
                        {
                            FileInfo fi = new FileInfo(f);
                            FileCheck(fi); //如果是文件,执行FileCheck
                        }
                        DirSearch(d); //递归查询
                    }
                }
                catch (System.Exception excpt)
                {
                    MessageBox.Show(excpt.Message);
                }
            }
            #endregion

     

     #region  递归绑定树控件
            private void CreateTree()
            {
                NavList = riskType.GetListRisksType();
                if (NavList != null)
                {
                    if (NavList.Count >= 1)
                    {
                        this.TreeViewRiskType.Nodes.Clear();
                    }
                    foreach (Models.CfgRiskBasicType model in NavList.Where(p => p.typeDispOrder == 1))
                    {
                        TreeNode ParentNode = new TreeNode(model.riskBasicTypeName, model.cfgRiskBasicTypeID.ToString()+","+model.parentTypeID.ToString().Trim()+","+ model.typeDispOrder.ToString().Trim());
                        TreeViewRiskType.Nodes.Add(ParentNode);
                        GetChildNodes(ParentNode);
                    }

                    this.TreeViewRiskType.ExpandAll();
                   
                }
               
            }

            private void GetChildNodes(TreeNode ParentNode)
            {
                string [] strBytes  = ParentNode.Value.Trim().Split(',');
                Guid _cfgRiskBasicTypeID = new Guid(strBytes[0].Trim());

                foreach (Models.CfgRiskBasicType model in NavList.Where(p => p.parentTypeID == _cfgRiskBasicTypeID))
                {
                    TreeNode ChildNode = new TreeNode(model.riskBasicTypeName, model.cfgRiskBasicTypeID.ToString()+","+model.parentTypeID.ToString().Trim()+","+model.typeDispOrder.ToString().Trim());
                    //if (NavList.Exists(p => p.typeDispOrder == model.typeDispOrder)) GetChildNodes(ChildNode);
                    
                    if (NavList.Exists(p => p.cfgRiskBasicTypeID == model.parentTypeID)) GetChildNodes(ChildNode);
                    ParentNode.ChildNodes.Add(ChildNode);
                }
            }
            #endregion 

  • 相关阅读:
    做项目时写的数据库操作类。SqlHelper.cs(三)
    写的登录三层结构demo(工厂模式)
    在GridView中进行排序
    微信小程序 POST请求
    mysql replace into用法详细说明
    ThinkPHP Where 条件中使用表达式
    Google发转码工具 可将安卓程序转至iOS
    IOS笔记 本地化多语言支持
    persits.jpeg 水印组件
    PHP 数组操作
  • 原文地址:https://www.cnblogs.com/cuiwenke/p/1765425.html
Copyright © 2020-2023  润新知