我最近在几个不同的地方看到过这样的评论:"我在学校学习了递归,但从那时起就没有使用它或感觉到需要它." (递归似乎是某一类程序员中"书本学习"的一个流行的例子.)
嗯,在Java和Ruby [1]等命令式语言中,我们通常使用迭代并避免递归,部分原因是存在堆栈溢出的风险,部分原因是因为这些语言中的大多数程序员都习惯使用.
现在我知道,严格地说,在这样的语言中没有"必要的"递归用法:无论事情多么复杂,都可以用迭代替换递归.在这里"必要",我说的是以下内容:
您是否可以想到这些语言中代码的任何特定示例,其中递归比迭代(为了清晰,效率或其他原因)更好,无论如何您使用递归,转换为迭代会是一个很大的损失?
在答案中已经多次提到了递归行走的树:如果它可用,那么它使用它的确切原因是什么使得递归比使用库定义的迭代器更好?
[1]:是的,我知道这些也是面向对象的语言.然而,这与这个问题没有直接关系.
我有一个int变量,它包含多个标志,例如:
int styles = ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED;
Run Code Online (Sandbox Code Playgroud)
我可以测试一个标志的存在
boolean expanded = (styles & ExpandableComposite.EXPANDED) != 0;
Run Code Online (Sandbox Code Playgroud)
如何在不知道设置的确切标志的情况下styles清除标志的值,即动态删除?ExpandableComposite.EXPANDEDstyles
我用各种各样的C教程和与指针相关的书籍一直在苦苦挣扎几个小时,但我真正想知道的是,如果可以在创建一个char指针后更改它.
这是我尝试过的:
char *a = "This is a string";
char *b = "new string";
a[2] = b[1]; // Causes a segment fault
*b[2] = b[1]; // This almost seems like it would work but the compiler throws an error.
Run Code Online (Sandbox Code Playgroud)
那么有没有办法改变字符串内的值而不是指针地址?
谢谢
编辑:
谢谢大家的回答.现在更有意义了.特别有意义的是,为什么有时它工作正常而其他时候不工作.因为有时候我会传递一个char指针,有时会传递一个char数组(char数组工作正常).
Ruby在某些方面很慢.但它的哪些部分最成问题?
垃圾收集器对性能有多大影响?我知道有时候单独运行垃圾收集器需要几秒钟,特别是在使用OpenGL库时.
我使用Ruby的矩阵数学库特别慢.ruby如何实现基本数学有问题吗?
Ruby中是否有任何动态特性无法有效实现?如果是这样,Lua和Python等其他语言如何解决这些问题呢?
最近的工作是否已经显着提高了性能?
我遇到了SOAP序列化的问题,找到答案会很棒.这是一个非常简单的例子:
public void Test()
{
StringBuilder sb = new StringBuilder();
StringWriter writer = new StringWriter(sb);
SoapReflectionImporter importer = new SoapReflectionImporter();
XmlTypeMapping map = importer.ImportTypeMapping(typeof(A));
XmlSerializer serializer = new XmlSerializer(map);
serializer.Serialize(writer, new A());
}
[Serializable]
public class A
{
public A()
{
BB = new B();
}
public int a;
public B BB;
}
[Serializable]
public class B
{
public int A1 { get; set; }
public int A2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我运行方法Test()然后我得到以下异常: System.InvalidOperationException: Token StartElement in state Epilog …
作为表格的结果,我正在尝试保存新的品牌记录.在我看来,Gender是一个下拉列表,返回一个Integer,它是从ViewData填充的("性别")
我按如下方式设置了我的链接:
gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()
Run Code Online (Sandbox Code Playgroud)
这导致以下错误.
Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.
Run Code Online (Sandbox Code Playgroud)
有人可以用简单的英语向我解释参数.我也尝试过DB.Gender作为第一个参数,但没有快乐.
是否有WIN32 API可用于管理Windows中的文件夹共享?一些示例链接将有所帮助.谢谢.
我正在尝试编写一个工具,让我检查基于PowerBuilder的应用程序的状态.我正在考虑的是像Spy ++(或者更好的,"Snoop",因为它存在于.NET应用程序中),它允许我检查一些基于PowerBuilder的GUI的对象树(和对象的属性).
我对普通(基于MFC)的应用程序以及.NET应用程序已经做了同样的事情,但不幸的是我自己从未在PowerBuilder中开发过应用程序,所以我现在通常会考虑两个问题:
是否有一些API(最好是Java或C/C++)可以让人们遍历PowerBuilder应用程序的可视对象树?我在PowerBuilder Native Interface系统上读了一下,但似乎这是用C/C++编写PowerBuilder扩展,然后可以用PowerBuilder脚本语言调用,对吧?
如果有一些可用的API - 也许PowerBuilder应用程序甚至会暴露某种支持IPC的API,它允许我检查PowerBuilder对象层次结构的状态而不在PowerBuilder应用程序的进程中?也许有可用的自动化界面,或基于COM的东西 - 或者其他东西?
现在,我的印象是可能需要将一个DLL注入到PowerBuilder应用程序的进程中,然后获得对正在运行的PowerBuilder VM的访问权限,以便我可以查询它以获取对象树.然后,某种IPC机制将允许我将此信息传输出PowerBuilder应用程序的进程.
有没有人有这方面的经验,或者可以说明是否有人试图这样做?
最好的祝福,