遞歸算法,及其在樹形結構中的應用

1.遞歸算法一定要注意必須存在遞歸出口

示例如下:求N!   我們從例子中歸納如8!=7!*8,歸結方法爲 Multiply(n)=Multiply(n-1)*n

代碼如下:

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            //測試3的階乘結果
            Console.WriteLine(Multiply(3));   //經過測試結果爲6,正確。
            Console.Read();
        }


        //階乘的方法
        public static int Multiply(int n) 
        {
            if (n<0)
            {
                throw new Exception("階乘數不能小於0");
            }
            else if (n == 0)
            {
                return 0;
            }
                //n=1是遞歸出口,因爲在該代碼塊中沒再有調用該方法,而是給出了一個數
            else if (n == 1)
            {
                return 1;
            }
            else 
            {
                return Multiply(n-1) * n ;
            }
        }
    }
}

另外,在樹形結構中最常用的是遞歸算法。

這裏就舉例,樹形結構的典型代表是XML和TreeView

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;


namespace Test
{
    public partial class Form1 : Form
    {
        XmlDocument xml;
        public Form1()
        {
            //創建XmlDocument 實例
            xml = new XmlDocument();
            xml.Load("xmltest.xml");


            InitializeComponent();
        }
      
        //窗體加載事件
        private void Form1_Load(object sender, EventArgs e)
        {  //添加treeView的根節點
            this.treeView1.Nodes.Add(new TreeNode(xml.DocumentElement.Attributes["Name"].Value));

           //調用TreeNode添加方法
            LoadXML(this.treeView1.Nodes[0],xml.DocumentElement);
        }


        //添加TreeNode的方法
        private void LoadXML(TreeNode treeNode, XmlNode xmlNode) 
        {
            //將沒給xmlNode的子節點,添加到treeNode的子節點集合中,此處暗含遞歸出口---如果該節點沒有子節點,將直接退出!
            foreach (XmlNode node in xmlNode.ChildNodes)
            {
               TreeNode subTreeNode= treeNode.Nodes.Add(node.Attributes["Name"].Value);
               LoadXML(subTreeNode, node);
            }
        }

    }
}


XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<!--根節點     -->
<Company  Name="華爲">
      <Department Name="財務部">
                <Team Name="1號小組">
                        <Employee Name="張三"/>
                        <Employee Name="李四"/>
                        <Employee Name="王五"/>
                        <Employee Name="哈哈哈"/>
                </Team>
                <Team Name="2號小組">
                        <Employee Name="1"/>
                        <Employee Name="2"/>
                        <Employee Name="3"/>
                        <Employee Name="4"/>
                </Team>
                <Team Name="3號小組">
                      <Employee Name="a"/>
                      <Employee Name="b"/>
                      <Employee Name="c"/>
                      <Employee Name="d"/>
                </Team>
    </Department>
     <Department Name="行政部"/>
     <Department Name="研發部">
      <Team Name="財務1">
        <Employee Name="CFO"/>
      </Team>
    </Department>
     <Department Name="生產部"></Department> 
  
</Company>

效果圖:

發佈了28 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章