• 递归


    1. 【案例一】如下代码:

       

     class Program
    {
        private static int index= 0;
        static void Main(string[] args)
        {
        M1();
        Console.ReadLine();
        }
         private static void M1()
        {
            Console.WriteLine("A");
             if (index<3)
            {
            index++;
            M1();
            }
            Console.WriteLine("B");
        }
    }                    
    

      

    最终结果是:A A A A B B B B

        总结:当每次调用其它方法还是自己,都会重新分配一个内存空间,执行完成之后,向上执行,一直到调用者【Main()】方法执行完成之后。

    2. 【案例二】如下代码:

       

     static void Main(string[] args)
    {
        M1(0);
        Console.ReadLine();
    }
    ====================================================================================================================
    private static void M1(inti)
    {
         Console.WriteLine("A"+i);
        i++;
        if (i<3)
        {
            M1(i);
        }
        Console.WriteLine("B"+i);
    }    
    

      

        结果是:

        A0 A1 A2 B3 B2 B1

        分析图如下:

        

    3.【案例三】如下图:制作如下效果:【递归加载与删除】

        

    【加载数据库中的数据】代码如下:

           

     //加载数据库中的数据
    private void button1_Click(objectsender, EventArgse)
    {
        int pid=0;
        //1. 读取TblArea中的数据
        LoadAreaInfo(pid,treeView1.Nodes);
    }
    
        //加载数据
    private void LoadAreaInfo(intpid, TreeNodeCollection treeNodeCollection)
    {
        //1. 先执行查询,查询所有的AreaPid等于Pid的
        string sql="select AreaId,AreaName from TblArea where AreaPid=@pid";
        DataTable dt=SqlHelper.ExecuteDataTable(sql, CommandType.Text,new SqlParameter("@pid", pid));
        //2. 把dt中的数据绑定到treeNodeCollection上
        foreach (DataRow itemDr in dt.Rows)
        {
            TreeNode tnode=treeNodeCollection.Add(itemDr[1].ToString());
            tnode.Tag=itemDr[0];
            //读取河北下面的所有子城市,然后将这些数据绑定到tnode节点下
            LoadAreaInfo((int)itemDr[0],tnode.Nodes);
        }
    }            
    

      

    【递归删除】代码如下:

    private void button2_Click(objectsender, EventArgse)
    {
        //1. 获取当前选中节点
        TreeNodenode=treeView1.SelectedNode;
        if (node!=null)
        {
            //2. 根据当前选中节点获取AreaId
            intareaId=Convert.ToInt32(node.Tag);
        //===========执行递归删除==============
            DeleteNodeDiGui(areaId);
        //3. 执行删除
        //把记录从数据库中删除
        //普通的删除,只删除选中的那一条数据
        //DeleteNode(areaId);
        //从界面上把该节点也删除
        node.Remove();
    }
    else
    {
        MessageBox.Show("请选中节点!");
    }
    }   =======================================================================================================================================================
    
        privatevoidDeleteNodeDiGui(intareaId)
    
    {
    
    //1. 先把areaId作为父Id,查询所有的子元素
    
    stringsql="select AreaId from TblArea where AreaPid=@pid ";
    
    DataTabledt=SqlHelper.ExecuteDataTable(sql, CommandType.Text, newSqlParameter("@pid", areaId));
    
    //遍历查到的所有子元素集合dt,对于每一个查询到的子元素继续指向遍历与删除操作。
    
    foreach (DataRowdrindt.Rows)
    
    {
    
    DeleteNodeDiGui((int)dr[0]);
    
    }
    
     
    
    //2. 将当前的areaId这条记录删除
    
    DeleteNode(areaId);
    
    }
    
        =======================================================================================================================================================
    
    //删除数据库中的数据
    
    privatevoidDeleteNode(intareaId)
    
    {
    
    stringsql="delete from TblArea where areaId=@aid";
    
    SqlHelper.ExcuteNonQuery(sql, CommandType.Text, newSqlParameter("@aid", areaId));
    
    }                
    

      

  • 相关阅读:
    Java遍历Map键、值。获取Map大小的方法
    Oracle CASE WHEN 用法介绍
    JS动态改变select选择变更option的index值
    js对select动态添加和删除OPTION
    在js中使用createElement创建HTML对象和元素
    清空select标签中option选项的3种不同方式
    json-lib包笔记
    异常:javax.el.PropertyNotFoundException: Property 'id' not found on ..........
    golang struct的使用
    golang多维数组的切片
  • 原文地址:https://www.cnblogs.com/taidou/p/4720845.html
Copyright © 2020-2023  润新知