标签: recursion

在C++中递归到main()是否合法?

我读到C++标准禁止递归main(),但是g ++编译以下代码而没有抱怨:

int main()
{
    main();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以澄清这个吗?

c++ recursion standards program-entry-point

45
推荐指数
4
解决办法
3542
查看次数

在C++中包含彼此的标题

我是一个C++新手,但我无法在网上找到这个(最有可能是微不足道的)问题的答案.我在编译两个类相互包含的代码时遇到了一些麻烦.首先,我的#include语句应该在我的宏内部还是外部?实际上,这似乎并不重要.但是,在这种特殊情况下,我遇到了麻烦.将#include语句放在宏之外会导致编译器递归并给我"#include嵌套太深"的错误.这似乎对我有意义,因为在调用#include之前,这两个类都没有完全定义.然而,奇怪的是,当我尝试将它们放入其中时,我无法声明其中一个类的类型,因为它无法识别.从本质上讲,这是我正在尝试编译的内容:

啊

#ifndef A_H_
#define A_H_

#include "B.h"

class A
{
    private:
        B b;

    public:
        A() : b(*this) {}
};

#endif /*A_H_*/
Run Code Online (Sandbox Code Playgroud)

BH

#ifndef B_H_
#define B_H_

#include "A.h"

class B
{
    private:
            A& a;

    public:
        B(A& a) : a(a) {}
 };

#endif /*B_H_*/
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include "A.h"

int main()
{
    A a;
}
Run Code Online (Sandbox Code Playgroud)

如果它有所作为,我使用的是g ++ 4.3.2.

一般来说,#include语句应该去哪里?我一直看到它们超出了宏,但我清楚描述的场景似乎打破了这个原则.感谢任何帮助提前!如果我犯了任何愚蠢的错误,请允许我澄清我的意图!

c++ recursion header include

44
推荐指数
3
解决办法
4万
查看次数

SQL Server:如何在自引用表中获取父ID的所有子记录

嗨,我有一个引用自己的表,我需要能够从给定的父ID中选择父级及其所有子记录.

我的表格如下:

ID   | ParentID | Name         
-----------------------              
1      NULL       A
2      1          B-1
3      1          B-2
4      2          C-1
5      2          C-2
Run Code Online (Sandbox Code Playgroud)

因此,对于上面的示例,我希望能够传入值1并获取上面的所有记录.

到目前为止,我已经提出了以下递归表值函数,但它没有按预期运行(只返回第一条记录).

CREATE FUNCTION [dbo].[SelectBranches]
(   
    @id INT
    ,@parentId INT
)
RETURNS @branchTable TABLE
(
    ID INT
    ,ParentID INT
    ,Name INT
)
AS
BEGIN 

    IF @branchId IS NOT NULL BEGIN

        INSERT INTO @branchTable
        SELECT 
            ID
            ,ParentID
            ,Name
        FROM
            tblLinkAdvertiserCity
        WHERE
            ID = @id

    END

    INSERT INTO @branchTable
    SELECT
        br.ID
        ,br.ParentID
        ,br.Name
    FROM
        @branchTable b
    CROSS APPLY
        dbo.SelectBranches(NULL, …
Run Code Online (Sandbox Code Playgroud)

sql recursion sql-server-2005 hierarchy

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

所有迭代算法都可以递归表达吗?

如果没有,是否有一个好的计数器示例显示迭代算法,其中不存在递归对应物?

如果所有迭代算法都可以递归表达,那么在哪些情况下更难以做到这一点?

此外,编程语言在这一切中扮演什么角色?我可以想象,Scheme程序员对Java迭代(=尾递归)和堆栈使用的看法与Java专用程序员不同.

iteration recursion programming-languages language-theory

44
推荐指数
4
解决办法
2万
查看次数

为什么在Racket中以奇怪的方式定义foldl?

在Haskell中,与许多其他函数语言一样,函数foldl被定义为例如foldl (-) 0 [1,2,3,4] = -10.

这没关系,因为foldl (-) 0 [1, 2,3,4]根据定义,((((0 - 1) - 2) - 3) - 4).

但是,在Racket中,(foldl - 0 '(1 2 3 4))是2,因为Racket"智能地"计算如下:(4 - (3 - (2 - (1 - 0)))),确实是2.

当然,如果我们定义辅助功能翻转,像这样:

(define (flip bin-fn)
  (lambda (x y)
    (bin-fn y x)))
Run Code Online (Sandbox Code Playgroud)

然后我们可以在Racket中实现与Haskell相同的行为:而不是(foldl - 0 '(1 2 3 4))我们可以写:(foldl (flip -) 0 '(1 2 3 4))

问题是:为什么foldl球拍以这种奇怪的(非标准的,非直观的)方式定义,与其他语言不同?

recursion scheme functional-programming fold racket

44
推荐指数
4
解决办法
8345
查看次数

获取将返回列表的文件夹和子文件夹中的所有文件的方法

我有一个方法将遍历文件夹及其所有子文件夹并获取文件路径列表.但是,我只能弄清楚如何创建它并将文件添加到公共列表,而不是如何返回列表.这是方法:

public List<String> files = new List<String>();

private void DirSearch(string sDir)
    {
        try
        {
            foreach (string f in Directory.GetFiles(sDir))
            {
                files.Add(f);
            }
            foreach (string d in Directory.GetDirectories(sDir))
            {
                DirSearch(d);
            }
        }
        catch (System.Exception excpt)
        {
            MessageBox.Show(excpt.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

所以,我只是DirSearch()在我的代码中调用某个点并用路径"填充"列表,但我希望能够多次使用它来创建具有不同目录的不同列表等.

c# directory methods recursion file

44
推荐指数
4
解决办法
14万
查看次数

递归变量声明

我刚刚在愚蠢/ ManualExecutor.h中看到了这个黑魔法

TimePoint now_ = now_.min();
Run Code Online (Sandbox Code Playgroud)

在我对整个库源代码进行grep之后,我还没有看到now_除此处之外的其他任何变量的定义.这里发生了什么事?这实际上是某种递归变量声明吗?

variables recursion c++11 folly

44
推荐指数
2
解决办法
2327
查看次数

递归列出所有目录和文件

我想收到以下输出.

假设文件系统上的目录结构如下:

  -dir1
      -dir2
        -file1
        -file2
             -dir3
                -file3
                -file4
            -dir4
                -file5
       -dir5
             -dir6
             -dir7

脚本的输出必须如下:

目录:

/dir1
/dir1/dir2
/dir1/dir2/dir3
/dir1/dir2/dir4
/dir1/dir5
/dir1/dir5/dir6
/dir1/dir5/dir7

文件:

/dir1
/dir1/dir2/file1
/dir1/dir2/file2
/dir1/dir2/dir3/file3
/dir1/dir2/dir3/file4
/dir1/dir2/dir4/file5
/dir1/dir5/dir6
/dir1/dir5/dir7

你能告诉我如何保持的输出find . -type d,并find . -type f到另一个文件?

shell recursion directory-listing

43
推荐指数
4
解决办法
8万
查看次数

用于将递归算法转换为迭代算法的设计模式

是否有任何通用的启发式,提示,技巧或常用设计范例可用于将递归算法转换为迭代算法?我知道可以做到,我想知道在这样做的时候是否有值得牢记的做法.

iteration algorithm recursion heuristics

43
推荐指数
4
解决办法
3万
查看次数

递归,memoization和动态编程之间有什么区别?

可能重复:
动态编程和记忆:自上而下与自下而上的方法

我已经阅读了很多文章,但似乎无法理解它.有时递归和动态编程看起来相同,而在其他时候,memoization和动态编程看起来很相似.有人可以向我解释有什么区别吗?

PS如果您可以使用针对同一问题的三种方法向我指出一些代码,那么它也会很有帮助.(例如Fibonacci系列问题,我认为我读过的每篇文章都使用了递归,但将其称为动态编程)

algorithm recursion memoization dynamic-programming

43
推荐指数
4
解决办法
4万
查看次数