归递(1)——归递

1、递归就是函数自己调用自己。老和尚的故事。 

2、当递归调用层次过多的时候就会发生“StackOverflowException”异常,所以以后写程序如果遇到“StackOverflowException”异常,一般就是一个死的递归。递归都有一个递归的终止条件,就是什么时候不再递归了。

3、只要程序报错“StackOverflowException”,一般就是程序中没有“递归终止条件”。递归终止条件:也就是不再继续递归的情况。

4、用递归计算1+...+n的和

 static void Main(string[] args)
        {
            Output(0);
            Console.ReadKey();
        }
        static void Output(int i)
        {
            Console.WriteLine(i);
            if (i < 3)
            {
                Output(i + 1);//每调用一次相当于创建Output方法的一个实例
                Console.WriteLine(i);
                //每个方法内部的局部变量相当于每个方法“类实例”的私有字段
            }            
        }

分析这段代码的执行过程如下:

2:用string.IndexOf方法输出字符串中所有的姓名“同志们好我是陆荣锦。哈哈,我是小沈阳。哇塞我是小月月。” 。

案例,显示树的所有节点:

private void ShowNodes(TreeNodeCollection treeNodes) 

{
    foreach (TreeNode treeNode in treeNodes)     
    {
        txtLog.AppendText(treeNode.Text+"\n");
        ShowNodes(treeNode.Nodes);//显示此节点下的子节点
    } 
} 

写递归程序的时候不用刻意去分析执行流程,只要“想当然”就可以 盗梦空间。讲故事(讲故事(讲故事()))。

 static void Main(string[] args)
        {
            Output(0);
        }

        static void Output(int i)
        {
            Console.WriteLine(i);
            Output(i + 1);
        }

static void 讲故事()
        {
//            每调用一次函数,就相当于创建了函数的一个实例。
//自己调用自己,函数的每个不同的调用层次的【局部变量】都不互相干扰。
            count++;
            int i = count;
            Console.WriteLine(i+"从前有座山,山里有个庙,。。。。天天给小和尚讲故事,讲的是神马呢");
            if (count < 5)//递归的终止条件,递归一定要有终止条件
            {
                讲故事();
            }
            Console.WriteLine(count);//打印的是当前陀螺上的数字
            Console.WriteLine("第"+i+"层故事讲完了");
        }

//输出结果为什么是5、4、3、2、1?一旦进入下一层程序就暂停了。int i=count等于将那一刻的时间记录下来。


 static void Main(string[] args)
        {
           // Test2();
            //讲故事();
            //Show();

            string s ="fafasdfnumber=1,呼哈哈number=2,嘿嘿number=3,ddd";
            Process(s);
            Console.ReadKey();
        }

        static void Process(string s)
        {
            int index = s.IndexOf("number=");
            if(index<0)//如果字符串中不包含number=则终止递归
            {
                return;
            }
            char c = s[index+"number=".Length];
            Console.WriteLine(c);
            string leftStr = s.Substring(index+"number=".Length+1);//取提取后剩余的部分
            Process(leftStr);//继续进行递归处理
            Console.WriteLine(c);
        }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值