Han*_*son 105

Mat*_*ard 64
如何涉及文件系统中的目录结构.递归查找文件,删除文件,创建目录等.
这是一个Java实现,以递归方式打印出目录及其子目录的内容.
import java.io.File;
public class DirectoryContentAnalyserOne implements DirectoryContentAnalyser {
private static StringBuilder indentation = new StringBuilder();
public static void main (String args [] ){
// Here you pass the path to the directory to be scanned
getDirectoryContent("C:\\DirOne\\DirTwo\\AndSoOn");
}
private static void getDirectoryContent(String filePath) {
File currentDirOrFile = new File(filePath);
if ( !currentDirOrFile.exists() ){
return;
}
else if ( currentDirOrFile.isFile() ){
System.out.println(indentation + currentDirOrFile.getName());
return;
}
else{
System.out.println("\n" + indentation + "|_" +currentDirOrFile.getName());
indentation.append(" ");
for ( String currentFileOrDirName : currentDirOrFile.list()){
getPrivateDirectoryContent(currentDirOrFile + "\\" + currentFileOrDirName);
}
if (indentation.length() - 3 > 3 ){
indentation.delete(indentation.length() - 3, indentation.length());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ken*_*ric 32
这里有许多蹩脚的例子,但你想要一个真实世界的例子,所以想一想,这可能是我能提供的最好的:
你发现一个人患有特定的感染性疾病,这是非致命性的,并迅速自我修复(A型),除了五分之一的人(我们称之为B型),他们永久感染了它并且没有症状,仅仅是一个吊具.
当类型B感染多种类型A时,这会产生非常恼人的破坏性波浪.
你的任务是追踪所有类型的Bs并免疫它们以阻止疾病的中坚力量.不幸的是,你不能在全国范围内治疗所有人,因为那些类型的人对于治疗B型的治疗方法也是致命的过敏.
这样做的方式是社交发现,给予感染者(A型),在上周选择所有联系人,在堆上标记每个联系人.当您测试某人受感染时,请将其添加到"跟进"队列中.当一个人是B型时,将它们添加到头部的"跟进"(因为你想要快速停止).
处理完一个人后,从队列前面选择一个人,并根据需要进行免疫.获取以前未访问的所有联系人,然后测试他们是否被感染.
重复,直到受感染的人的队列变为0,然后等待另一次爆发..
(好吧,这有点迭代,但它是一种解决递归问题的迭代方法,在这种情况下,尝试发现可能的问题路径的群体基础的广泛首次遍历,此外,迭代解决方案通常更快,更有效,我强迫性地去除各地的递归,这本身就变得本能了.......该死的!)
Mar*_*ote 11
当然很多编译器都会大量使用递归.计算机语言本身就具有递归性(即,您可以在其他'if'语句中嵌入'if'语句等).
禁用/设置容器控件中所有子控件的只读.我需要这样做,因为一些儿童控件本身就是容器.
public static void SetReadOnly(Control ctrl, bool readOnly)
{
//set the control read only
SetControlReadOnly(ctrl, readOnly);
if (ctrl.Controls != null && ctrl.Controls.Count > 0)
{
//recursively loop through all child controls
foreach (Control c in ctrl.Controls)
SetReadOnly(c, readOnly);
}
}
Run Code Online (Sandbox Code Playgroud)

(来源:mit.edu)
以下是eval的定义:
(define (eval exp env)
(cond ((self-evaluating? exp) exp)
((variable? exp) (lookup-variable-value exp env))
((quoted? exp) (text-of-quotation exp))
((assignment? exp) (eval-assignment exp env))
((definition? exp) (eval-definition exp env))
((if? exp) (eval-if exp env))
((lambda? exp)
(make-procedure (lambda-parameters exp)
(lambda-body exp)
env))
((begin? exp)
(eval-sequence (begin-actions exp) env))
((cond? exp) (eval (cond->if exp) env))
((application? exp)
(apply (eval (operator exp) env)
(list-of-values (operands exp) env)))
(else
(error "Unknown expression type - EVAL" exp))))
Run Code Online (Sandbox Code Playgroud)
以下是apply的定义:
(define (apply procedure arguments)
(cond ((primitive-procedure? procedure)
(apply-primitive-procedure procedure arguments))
((compound-procedure? procedure)
(eval-sequence
(procedure-body procedure)
(extend-environment
(procedure-parameters procedure)
arguments
(procedure-environment procedure))))
(else
(error
"Unknown procedure type - APPLY" procedure))))
Run Code Online (Sandbox Code Playgroud)
这是eval-sequence的定义:
(define (eval-sequence exps env)
(cond ((last-exp? exps) (eval (first-exp exps) env))
(else (eval (first-exp exps) env)
(eval-sequence (rest-exps exps) env))))
Run Code Online (Sandbox Code Playgroud)
eval- > apply- > eval-sequence- >eval
小智 7
人们通常使用递归方法对堆栈文档进行排序.例如,假设您正在对包含名称的100个文档进行排序.首先将文件放入第一个字母的堆中,然后对每个堆进行排序.
在字典中查找单词通常通过类似二进制搜索的技术来执行,该技术是递归的.
在组织中,老板经常向部门负责人发出命令,而部门负责人又向管理人员发出命令,等等.
递归适用于可以将其分解(减少)为更小的部分的问题(情况),并且每个部分看起来与原始问题相似。
包含与其自身相似的较小部分的事物的好例子是:
递归是一种不断将问题分解为越来越小的部分的技术,直到其中一个部分变得小到小菜一碟。当然,在分解它们之后,您必须以正确的顺序将结果“缝合”在一起,以形成原始问题的完整解决方案。
一些递归排序算法、树遍历算法、映射/归约算法、分而治之都是这种技术的示例。
在计算机编程中,大多数基于堆栈的调用返回类型语言已经具有内置的递归功能:即
小智 5
层级组织中的反馈循环。
高层老板告诉高层管理人员收集公司每个人的反馈。
每位高管都会收集他/她的直接下属,并告诉他们从直接下属那里收集反馈。
并继续下去。
没有直接报告的人(树中的叶节点)会给出反馈。
反馈会返回到树上,每个经理都会添加他/她自己的反馈。
最终所有的反馈都会反馈给最高老板。
这是自然的解决方案,因为递归方法允许在每个级别进行过滤 - 整理重复项并删除令人反感的反馈。最高老板可以发送一封全局电子邮件,并让每个员工将反馈直接反馈给他/她,但存在“你无法处理真相”和“你被解雇”的问题,因此递归在这里效果最好。