zoukankan      html  css  js  c++  java
  • C# 递归

    本菜鸟刚刚看书看到递归了,发现解决某些问题的时候还是挺好的,所以把它弄出来学习一下。

    递归其实就是除了可以调用其他的方法,它还能调用它自己。它把大的问题转化为小的问题,再转化到最小解,然后再返回往上调用,得出解。同时,我在别的BLOG中看到几点要素和注意事项把它给拉过来记录一下:

    (1)递归操作的每两步都是有紧密的联系,如在“递归”的“归操作时”,前一次的输出就是后一次的输入。

    (2)必须要有结束递归的条件。

    (3)递归必须要有一个递归出口。

    (4)大规模的问题不适合递归,因为需要进栈出栈比较频繁,效率比较低,还容易造成栈溢出。

      比如最最常用的阶乘的问题,如果数字小的话就可以用递归来解决:

        int Factorial(int i) {
                if (i <= 1)
                    return i;
                else
                    return i * Factorial(i - 1);
    
            }
            static void Main(string[] args) {
                Program pro = new Program();
                Console.WriteLine(pro.Factorial(5));
            }

      上面的Factorial方法,每当调用自己的时候会有一个新的帧被压到栈里面去,所以如果数字大的话,很容易就造成栈的溢出,那就只能用其他的方法。

      下面有一个例子是这样的:

        static void Main(string[] args) {
                Program pro = new Program();
                pro.Test(3);
            }
    
            public void Test(int i) {
                if (i == 0)
                    return;
                Test(i - 1);
                Console.WriteLine(i);
            }

      这个的输出结果为:

    1
    2
    3
    

      上面这个递归输出3的时候,方法Test有4个不同的,独立的帧被压入了栈里面。因为栈是先进后出的,所以输出时,就是123的顺序输出。

  • 相关阅读:
    Swift Development – List of Resources You Must Bookmark
    Best jQuery Plugins of the Month – May 2014
    css,js移动资源
    移动技术资源
    视网膜New iPad与普通分辨率iPad页面的兼容处理
    使用匿名函数给setInterval()传递参数
    藏地传奇js
    藏地传奇瀑布流
    jQuery处理JSONP
    网易游戏js-滚动支持自适应
  • 原文地址:https://www.cnblogs.com/socialdk/p/2908758.html
Copyright © 2011-2022 走看看