标签: recursion

什么是尾递归?

在开始学习lisp时,我遇到了尾递归这个术语.这究竟是什么意思?

language-agnostic algorithm recursion functional-programming tail-recursion

1602
推荐指数
27
解决办法
42万
查看次数

什么是尾部呼叫优化?

很简单,什么是尾部调用优化?更具体地说,任何人都可以显示一些可以应用的小代码片段,而不是在哪里,并解释为什么?

language-agnostic algorithm recursion tail-recursion tail-call-optimization

765
推荐指数
8
解决办法
15万
查看次数

将平台解析成树的最有效/优雅的方法是什么?

假设您有一个存储有序树层次结构的平面表:

Id   Name         ParentId   Order
 1   'Node 1'            0      10
 2   'Node 1.1'          1      10
 3   'Node 2'            0      20
 4   'Node 1.1.1'        2      10
 5   'Node 2.1'          3      10
 6   'Node 1.2'          1      20
Run Code Online (Sandbox Code Playgroud)

这是我们所拥有的图表[id] Name.根节点0是虚构的.

                       [0] ROOT
                          /    \ 
              [1] Node 1          [3] Node 2
              /       \                   \
    [2] Node 1.1     [6] Node 1.2      [5] Node 2.1
          /          
 [4] Node 1.1.1

您将使用什么简约方法将其输出为HTML(或文本,就此而言)作为正确排序,正确缩进的树?

进一步假设你只有基本的数据结构(数组和散列图),没有带有父/子引用的花哨对象,没有ORM,没有框架,只有你的双手.该表表示为结果集,可以随机访问.

伪代码或普通英语是可以的,这纯粹是一个概念性的问题.

额外问题:在RDBMS中存储这样的树结构是否有根本更好的方法?


编辑和补充

回答一个评论者(Mark Bessey的)问题:根节点不是必需的,因为它永远不会被显示.ParentId = 0是表示"这些是顶级"的惯例.Order列定义了如何对具有相同父节点的节点进行排序.

我所谈到的"结果集"可以被描绘成一组哈希图(保留在该术语中).因为我的例子意味着已经存在.有些答案会加倍努力并首先构建它,但那没关系.

树可以任意深.每个节点可以有N个子节点.不过,我并没有考虑到"数百万条目".

不要将我选择的节点命名('Node 1.1.1')误认为是依赖的东西.节点同样可以称为"Frank"或"Bob",不暗示命名结构,这只是为了使其可读. …

sql algorithm tree recursion hierarchical-data

508
推荐指数
8
解决办法
11万
查看次数

递归查找具有特定扩展名的文件

我正在尝试使用我的bash(最新的Ubuntu LTS版本)在目录及其子目录中查找具有特定扩展名的所有文件.

这是在脚本文件中写的:

#!/bin/bash

directory="/home/flip/Desktop"
suffix="in"

browsefolders ()
  for i in "$1"/*; 
  do
    echo "dir :$directory"
    echo "filename: $i"
    #   echo ${i#*.}
    extension=`echo "$i" | cut -d'.' -f2`
    echo "Erweiterung $extension"
    if     [ -f "$i" ]; then        

        if [ $extension == $suffix ]; then
            echo "$i ends with $in"

        else
            echo "$i does NOT end with $in"
        fi
    elif [ -d "$i" ]; then  
    browsefolders "$i"
    fi
  done
}
browsefolders  "$directory"
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我在终端中启动这个脚本时,它说:

[: 29: in: unexpected operator
Run Code Online (Sandbox Code Playgroud)

($extension而不是 …

linux bash recursion

402
推荐指数
8
解决办法
46万
查看次数

如何递归查找和列出具有子目录和时间的目录中的最新修改文件?

  • 操作系统:Linux

  • 文件系统类型:ext3

  • 首选解决方案:bash(script/oneliner),ruby,python

我有几个目录,其中包含几个子目录和文件.我需要列出所有这些目录,这些目录的构造方式使得每个第一级目录都列在其中最新创建/修改的文件的日期和时间旁边.

为了澄清,如果我触摸文件或将其内容修改为几个子目录级别,那么该时间戳应该显示在第一级目录名称旁边.假设我有一个像这样结构化的目录:

./alfa/beta/gamma/example.txt
Run Code Online (Sandbox Code Playgroud)

我修改了文件的内容example.txt,我需要alfa以人类可读的形式显示在第一级目录旁边的时间,而不是epoch.我试着用find,有些事xargs,sort和喜欢,但我不能解决该问题得到,当我创建/修改文件几级向下"阿尔法"的文件系统时间戳不会改变.

linux filesystems recursion time

390
推荐指数
10
解决办法
39万
查看次数

Python中的最大递归深度是多少,以及如何增加它?

我在这里有这个尾递归函数:

def recursiveFunction(n, sum):
    if n < 1:
        return sum
    else:
        return recursiveFunction(n-1, sum+n)

c = 998
print(recursiveFunction(c, 0))
Run Code Online (Sandbox Code Playgroud)

它可以工作到n = 997,然后它就会中断并吐出"比较时超出的最大递归深度" RuntimeError.这只是一个堆栈溢出?有办法解决它吗?

python recursion

357
推荐指数
13
解决办法
40万
查看次数

Try-finally块阻止StackOverflowError

看看以下两种方法:

public static void foo() {
    try {
        foo();
    } finally {
        foo();
    }
}

public static void bar() {
    bar();
}
Run Code Online (Sandbox Code Playgroud)

运行bar()清楚导致a StackOverflowError,但运行foo()没有(程序似乎只是无限期运行).这是为什么?

java stack-overflow recursion try-finally

329
推荐指数
5
解决办法
1万
查看次数

从递归到迭代的方法

在我多年的编程中,我已经使用递归来解决简单的问题,但我完全清楚,有时你需要迭代,因为内存/速度问题.

所以,在很久以前的某个时候,我去尝试找出是否存在任何"模式"或文本书的方式将常见的递归方法转换为迭代而没有发现任何东西.或者至少我记不住任何事都会有所帮助.

  • 有一般规则吗?
  • 有"模式"吗?

theory iteration recursion computer-science

323
推荐指数
11
解决办法
12万
查看次数

如何在多个文件中搜索字符串并返回Powershell中的文件名?

我几天前已经开始学习powershell了,我在google上找不到任何我需要的东西,所以请忍受我的问题.

我被要求将一些文本字符串替换为多个文件.我不一定知道可能的目标文件的扩展名,也不知道它们的位置.到目前为止,我已经设法以递归方式浏览目录(get-ChildItem -recurse),并使用get-content和select-string查找我正在寻找的字符串:

Get-ChildItem -recurse | Get-Content | Select-String -pattern "dummy"
Run Code Online (Sandbox Code Playgroud)

问题是,我可以看到我正在寻找的文本的出现,但我不知道如何告诉PS返回每个匹配文件的路径和名称.

如何获取包含我要查找的表达式的文件的名称和位置?

string powershell recursion search text

279
推荐指数
10
解决办法
31万
查看次数

递归比循环更快吗?

我知道递归有时比循环更清晰,而且我不会询问何时应该使用递归迭代,我知道有很多问题已经存在.

我要问的是,递归是否比循环更快?对我来说,似乎总是能够改进循环并让它比递归函数更快地执行,因为循环不会不断地设置新的堆栈帧.

我特别关注在递归是处理数据的正确方法的应用程序中递归是否更快,例如在一些排序函数,二叉树等中.

iteration recursion performance loops

270
推荐指数
8
解决办法
11万
查看次数