• C#递归


    什么是递归?

     
    先看语言例子
     
        从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”

    一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了墓志铭,让未来的狗可以看到:“一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了墓志铭,让未来的狗可以看到:‘一只狗来到厨房,偷走一小块面包。厨子举起杓子,把那只狗打死了。于是所有的狗都跑来了,给那只狗掘了一个坟墓,还在墓碑上刻了墓志铭,让未来的狗可以看到……’”

     看到了吧,不断的循环重复。

     再来看数学例子,

     斐波那契数列是典型的递归案例:

      F0=0; F=1; FN= Fn-1+Fn-2

      0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……

      这里需要注意 0不是第一项,而是第0项

     

      再来看下编程思想

     我们在编程语言里面可以看作是方法调用自己,不断的调用。直至有某个条件来终止,则停止调用。

     

     上代码

    namespace 递归算法
    {
        class Program
        {
            public static void Main(string[] args)
            {
                 //输出1,2,3,4,8,13,21,34,55,89
                
                //屌丝算法             
                 int[] countNumber=new int[10];
                 
                 
                 for(int i=0;i<countNumber.Length;i++)
                 {
                     if(i==0)
                     {
                         countNumber[0]=1;
                     }
                     
                     else if(i==1)
                     {
                         countNumber[1]=2;
                     }
                     
                     if(i>=2)
                     {
                     countNumber[i]=countNumber[i-1]+countNumber[i-2];
                     }
                 }
                 
                 foreach(var Num in countNumber)
                 {
                     Console.Write(Num+" ");
                 }
                 
                 
                 Console.WriteLine("
    ------------- 我是分割线 --------------- ");
                 
                 //文艺算法,递归
                 int[] countNumber2=new int[10];
                 for(int i=0;i<countNumber2.Length;i++)
                 {
                     countNumber2[i]=DiGui(i);
                 }
                 foreach(var Num2 in countNumber2)
                 {
                     Console.Write(Num2    +" ");
                 }
                 Console.ReadKey();
            }
            
            public static int  DiGui(int j)
            {
                int s;
                if(j==0||j==1)
                {
                    s=j+1;
                }
                else
                {
                    s=DiGui(j-1)+DiGui(j-2);   //调用方法本身
                }
                
                return s;
            }
        }
    }

    传送门:递归经典算法

    传送门:递归算法为什么那么慢?

  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/legendtao/p/5210368.html
Copyright © 2020-2023  润新知