您的位置:首页 > 其它

递归和嵌套循环的区别

2016-01-08 17:31 295 查看
递归和嵌套循环的区别

亲,不要误以为自己调用自己就等于递归了!





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;

namespace TreeSearch
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void btnSearch_Click(object sender, EventArgs e)
{
//查询前折叠所有
trv.CollapseAll();

//关键字
string keyStr = txtKey.Text.Trim();

//遍历根节点
foreach (TreeNode tn in trv.Nodes)
{
CheckNode(tn, keyStr);
FindChildNode(tn, keyStr);
}
}

/// <summary>
/// 遍历子节点
/// </summary>
/// <param name="tnParent">当前节点</param>
/// <param name="keyStr">关键字</param>
void FindChildNode(TreeNode tnParent, string keyStr)
{
foreach (TreeNode tn in tnParent.Nodes)
{
CheckNode(tn, keyStr);

//递归检查当前节点的子节点
FindChildNode(tn, keyStr);
}
}

/// <summary>
/// 展示符合条件的节点
/// </summary>
/// <param name="tn"></param>
void DisplayNode(TreeNode tn)
{
if (tn.Parent != null)
{
tn.Parent.Expand();
DisplayNode(tn.Parent);
}
}

/// <summary>
/// 检测当前节点
/// </summary>
/// <param name="tn"></param>
/// <param name="keyStr"></param>
void CheckNode(TreeNode tn, string keyStr)
{
//包含关键字,变红并展示节点
if (tn.Text.Contains(keyStr))
{
tn.ForeColor = Color.Red;
DisplayNode(tn);
}
else
{
//代替初始化的操作方法
tn.ForeColor = Color.Black;
}
}

//从低往高加
public int sum23(int param)
{
int sum = 0;
for (int i = 0; i < param; i++)
{
sum += 1;
}
return sum;
}

//从高往第加
public int sum1(int param)
{
int sum = 0;
for (int i = param; i >= 0; i--)
{
sum += i;
}
return sum;
}

public int sum(int param)
{
if (param == 0) { return 0; }
else
{
return  param += sum(param-1);
}
}

public long Fac(int n)
{
if (n == 0)
{
return 1;
}
else
{   //用for循环来不断的叠乘
long value = 1;
for (int i = n; i > 0; i--)
{
value *= 1;
}
return value;
}

}

}
}


其实,我也不知道第一种情况算不算严格意义上滴递归滴呀;

下面的方法是另外的一种方式来实现滴呀;

void FindChildNode2(TreeNode tnParetn, string KeyStr)
{
int len = tnParetn.Nodes.Count;
for (int i = 0; i < len; i++)
{
TreeNode tn= tnParetn.Nodes[i];
if (tn == null)
{
break;   //种方式也是也已滴一  //这个就算是遍历了一颗节点数滴呀;
//这种到底算不算是递归呢?
}
else
{
CheckNode(tn, KeyStr);
FindChildNode2(tn, KeyStr); //就等于这样一种形式滴呀;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: