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

    传送门:递归经典算法

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

  • 相关阅读:
    input 去除边框
    分页封装
    python后端继承序列化,不同访问形式返回不同结果
    解决vue前端不显示自定义字段
    Vue 获取后端多对多关联表信息
    vue 前段增删改查代码规范
    前段增删改查的应用
    ant-design-vue基础
    python 后端 数据库的创表及增删改查 简单使用
    配置Uwsgi+Nginx+Django+Vue
  • 原文地址:https://www.cnblogs.com/legendtao/p/5210368.html
Copyright © 2011-2022 走看看