Tag: 递归

递归方法比交互方法慢10倍

尽可能清理代码以显示我的问题。 基本上它是八叉树搜索+相交。 交叉函数来自SDK(整个项目是rhino的插件)。 如果我使用交叉调用进行循环,它比通过八叉树的递归搜索快10倍。 陌生人甚至 – 我隔离了交叉调用的时间 – 并且在递归内部它比循环中慢8倍。 可能有1000个原因,为什么它的行为像这样,但我希望我做了一些明显的错误,有人可以通过查看代码发现。 有一个缓慢的背诵片: public void NewRayCast() { int runs = 500000; //how many rays we cast Point3d raypos = new Point3d(0, 0, 0); //raystart Ray3d ray = new Ray3d(); Random r = new Random(); //here we create targets to scatter the ray directions Vector3d[] targets = new […]

递归搜索文件/文件夹结构

我正在尝试为返回文件和文件夹列表的Web服务构建递归搜索function。 我创建了两个方法,因此它们充当递归搜索,首先获取顶级内容,然后将任何文件添加到fileList,将任何子文件夹添加到subFoldersList。 我们传入访问级别(在我们的例子中为root),然后传递您想要信息的路径。 如果找到任何文件夹,则删除顶部文件夹,因为它已开始搜索该文件夹。 然后它调用processDirectories方法,该方法将getFiles传递回新的路径位置,重新开始该过程。 现在用于测试我的文件夹结构如下。 当它将第二个文件(profilepic.png)添加到列表中时。 我收到错误“集合已被修改;枚举操作可能无法执行”。 导致此错误的原因是什么? Photos picture1.png TestFolder profilepic.png 我的代码: public static List fileList = new List(); public static List subFolderList = new List(); static void processDirectories(string access, string Folder) { getFiles(access, Folder); } static void getFiles(string access, string Folder) { var accessToken = new OAuthToken(token, secret); var api = new […]

序列化代码示例中的无限循环

从这里查看以下代码。 它是关于在wcf中序列化时在数据提取(对象模型,对象图,域模型)中保留循环引用。 class ReferencePreservingDataContractSerializerOperationBehavior :DataContractSerializerOperationBehavior { public ReferencePreservingDataContractSerializerOperationBehavior( OperationDescription operationDescription) : base(operationDescription) { } public override XmlObjectSerializer CreateSerializer( Type type, string name, string ns, IList knownTypes) { return CreateDataContractSerializer(type, name, ns, knownTypes); } private static XmlObjectSerializer CreateDataContractSerializer( Type type, string name, string ns, IList knownTypes) { return CreateDataContractSerializer(type, name, ns, knownTypes); } public override XmlObjectSerializer […]

C# – 查找图像的边界(不是大小)

我正在开发一个应用程序来均匀地分割图像网格并使图像居中(基于它们的相似性)。 到目前为止,我可以设法修复一个小尺寸的图像网格,但每当我尝试更大的“精灵”大小(例如100×100)时,我就会出现Stack Overflow错误。 是的我正在使用递归,但每当检查一个像素时,我设置一个布尔值来停用它,将它复制到一个列表并继续检查其他(在所有方向),直到列表填满了来自网格。 我不确定这是否是最佳方式,因为对于每次调用,我调用相同的方法7次(假设有7个相邻的像素尚未检查)…直到没有剩余的像素来检查,并且我可以转到网格中的下一个图像。 我尝试跟踪错误开始发生的地方,检查了大约1600像素并将它们添加到列表中。 MyPixel是一个包含4个变量的类:x(int),y(int),color(Color)和checked(bool) public void processSprite(int i, int j) { //OOO //OXO //OOO pixeltemp.Add(new MyPixel(imap.pixels[i, j].x, imap.pixels[i, j].y, imap.pixels[i, j].color)); imap.pixels[i, j].read = true; //OOO //OOX //OOO try { if (!imap.pixels[i + 1, j].read) { if (imap.pixels[i + 1, j].color.A == 0) //Found a Border { imap.pixels[i + 1, j].read = […]

需要递归地生成文件数组的每个唯一组合

我研究过很多类似的请求,但没有什么是我需要的。 这是我的问题。 我正在使用C#,我有一个FileInfo []数组,其中包含未知数量的元素。 FileInfo[] files = new FileInfo[] { new FileInfo(@”C:\a.jpg”), new FileInfo(@”C:\b.jpg”), new FileInfo(@”C:\c.jpg”), new FileInfo(@”C:\d.jpg”), new FileInfo(@”C:\e.jpg”), new FileInfo(@”C:\f.jpg”), new FileInfo(@”C:\g.jpg”), new FileInfo(@”C:\h.jpg”), new FileInfo(@”C:\i.jpg”), }; // Using 9 elements for this example 我需要生成这些文件的每个可能的重新排序组合的列表,而不重复文件。 所以,我的一些结果将是这样的(例子不是代码格式): a, b, c, d, e, f, g, h, i a, b, c, d, e, f, g, i, […]

用于查找非父/祖父/ /等或子/孙等的所有链接对象的算法

我有一个名为Device的对象。 Device可以有一个父 Device 。 Device也可以有n个子Devices 。 我有一个下拉列表,显示所有可选Devices 。 我可以很容易地获得数据库中的所有Devices – db.Devices 。 层次结构可以是无限级别的。 我需要让所有不在树中给定Device之上或之下的Device 。 基本上我要求与给定Device无关的Device (父母/祖父母/祖父母/祖父母/等或儿童/孙子/曾孙子等)。 我还需要从列表中排除给定的Device 。 做这个的最好方式是什么? 我应该使用递归吗? (我使用C#和Entity Framework与SQL Server数据库,所以我可以使用Linq To SQL或使用模型本身。)

c#递归reflection和通用列表设置默认属性

我试图使用reflection来实现以下目的: 我需要一个方法,我传入一个对象,这个方法将递归实例化具有子对象的对象,并使用默认值设置属性。 我需要实例化整个对象,根据需要进行多个级别。 此方法需要能够处理具有多个属性的对象,这些属性将是其他对象的通用列表。 这是我的示例代码(当我得到一个包含List的对象时,我得到一个参数计数不匹配exception: private void SetPropertyValues(object obj) { PropertyInfo[] properties = obj.GetType().GetProperties(); foreach (PropertyInfo property in properties) { if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && property.PropertyType.FullName.Contains(“BusinessObjects”)) { Type propType = property.PropertyType; var subObject = Activator.CreateInstance(propType); SetPropertyValues(subObject); property.SetValue(obj, subObject, null); } else if (property.PropertyType == typeof(string)) { property.SetValue(obj, property.Name, null); } else if (property.PropertyType […]

linq嵌套列表包含

我有一个问题,你在那里的linq专家! 在组件实例的嵌套列表中,我需要知道其中是否存在特定类型的组件。 可以用linq来表达吗? 考虑到可能有application.Components [0] .Components [0] .Components [0] …我的问题是面向linq中的递归查询! 我给你留下实体让你对模型有所了解。 public class Application { public List Components { get; set; } } public class Component { public ComponentType Type { get; set; } public List Components { get; set; } } public enum ComponentType { WindowsService, WebApplication, WebService, ComponentGroup }

为什么这个递归不会产生StackOverFlowException?

这段代码有什么问题: using System; namespace app1 { static class Program { static int x = 0; static void Main() { fn1(); } static void fn1() { Console.WriteLine(x++); fn1(); } } } 我使用这个命令编译这段代码: csc /warn:0 /out:app4noex.exe app4.cs 当我双击exe时,它似乎没有抛出exception(StackOverFlowException),并且永远保持运行。 使用visual studio命令提示符2010,但我也在系统上安装了vs 2012,这些都是最新的。

如何使用递归编程填充包含许多类别的列表框

我有一个类别表,设置为允许无限数量的子类别级别。 我想模仿以下内容: 应该澄清的是,子类别可以有子类别。 例如父母 – > 1级 – > 2级 – > 3级等 我的类别表有两列, CategoryName和ParentID 。 在为产品分配正确的类别时,将使用此列表框。 我怎么写这个? 编辑 为了回应thedugas我不得不修改你的答案以适应我的情况。 我发现了一些需要修复的错误,但下面是一个最终的,有效的解决方案。 protected void Page_Load(object sender, EventArgs e) { using (DataClasses1DataContext db = new DataClasses1DataContext()) { var c = db.Categories.Select(x => x); List categories = new List(); foreach (var n in c) { categories.Add(new Category() { […]