递归在我们平常的练习中经常会使用到,那么到底什么是递归呢?
递归: 它是指一段程序直接或者间接调用自身的一种方法,通过这种形式执行需要进行一些固定步骤的许多操作,它可以把一个复杂并且庞大的问题简单化,通过专注于解决它分化出来的小问题从而解决大问题,从而大大减少我们的代码量,是提高我们编码效率的很好方法。
递归的主要点:
1、递归函数的参数和返回值
2、终止条件
3、递归的逻辑设计
目标是得到如下的效果:
/// <summary>
/// 提供数据源使用
/// </summary>
public class Enum
{
/// <summary>
/// 父级菜单编号
/// </summary>
public string menu_nbr { get; set; }
/// <summary>
/// 当前菜单序号
/// </summary>
public int menu_select { get; set; }
/// <summary>
/// 菜单标签
/// </summary>
public string menu_lable { get; set; }
}
/// <summary>
/// 菜单类
/// </summary>
public class MenuHelp
{
public MenuHelp()
{
Childen = new List<MenuHelp>();
}
/// <summary>
/// 父级菜单编号
/// </summary>
public string menu_nbr { get; set; }
/// <summary>
/// 当前菜单序号
/// </summary>
public int menu_select { get; set; }
/// <summary>
/// 菜单标签
/// </summary>
public string menu_lable { get; set; }
/// <summary>
/// 菜单描述
/// </summary>
public string Remark { get; set; }
/// <summary>
/// 排序
/// </summary>
public int Sort { get; set; }
public List<MenuHelp> Childen { get; set; }
}
public static List<MenuHelp> GetMenuTree(string menu)
{
try
{
//充当数据源
List<Enum> menu_mstr = new List<Enum>()
{
new Enum(){menu_nbr="X",menu_select=10,menu_lable="系统管理" },
new Enum(){menu_nbr="X",menu_select=20,menu_lable="基础数据" },
new Enum(){menu_nbr="10",menu_select=1,menu_lable="权限维护" },
new Enum(){menu_nbr="10",menu_select=2,menu_lable="标签维护" },
new Enum(){menu_nbr="10.1",menu_select=1,menu_lable="公司维护" },
new Enum(){menu_nbr="10.1",menu_select=2,menu_lable="域维护" },
new Enum(){menu_nbr="10.1",menu_select=3,menu_lable="权限分配" },
new Enum(){menu_nbr="10.1.3",menu_select=1,menu_lable="用户维护" },
new Enum(){menu_nbr="20",menu_select=1,menu_lable="错误信息维护" },
};
var tree = new List<MenuHelp>();
var children = menu_mstr.Where(m => m.menu_nbr == menu).ToList();
if (children.Count > 0)
{
for (var i = 0; i < children.Count; i++)
{
string lable = children[i].menu_nbr == "X" ? $"{children[i].menu_select}" : $"{children[i].menu_nbr}.{children[i].menu_select}";
MenuHelp itemMenu = new MenuHelp()
{
menu_nbr = children[i].menu_nbr,
menu_select = children[i].menu_select,
menu_lable = children[i].menu_lable,
Remark = $"{lable} {children[i].menu_lable}",
Childen = GetMenuTree(lable),
Sort = Convert.ToInt32(string.IsNullOrEmpty(lable) ? "0" : lable.Replace(".", ""))
};
tree.Add(itemMenu);
Console.WriteLine(itemMenu.Remark);
}
}
return tree.OrderBy(oo => oo.Sort).ToList();
}
catch (Exception ex)
{
throw ex;
}
}
//直接调用即可
List<MenuHelp> result= GetMenuTree("X");
这是运行的结果: