标签: recursion

确定递归函数的复杂性(Big O表示法)

我明天有一个计算机科学中期,我需要帮助确定这些递归函数的复杂性.我知道如何解决简单的案例,但我仍然在努力学习如何解决这些更难的案例.这些只是我无法弄清楚的一些示例问题.任何帮助将非常感谢,并将大大有助于我的学习,谢谢!

int recursiveFun1(int n)
{
    if (n <= 0)
        return 1;
    else
        return 1 + recursiveFun1(n-1);
}

int recursiveFun2(int n)
{
    if (n <= 0)
        return 1;
    else
        return 1 + recursiveFun2(n-5);
}

int recursiveFun3(int n)
{
    if (n <= 0)
        return 1;
    else
        return 1 + recursiveFun3(n/5);
}

void recursiveFun4(int n, int m, int o)
{
    if (n <= 0)
    {
        printf("%d, %d\n",m, o);
    }
    else
    {
        recursiveFun4(n-1, m+1, o);
        recursiveFun4(n-1, m, o+1);
    }
}

int recursiveFun5(int n)
{ …
Run Code Online (Sandbox Code Playgroud)

recursion complexity-theory big-o

242
推荐指数
5
解决办法
19万
查看次数

以Java的形式递归列出文件

如何以递归方式列出Java中目录下的所有文件?框架是否提供任何实用程序?

我看到很多hacky实现.但没有来自框架或nio

java recursion nio file java-7

240
推荐指数
12
解决办法
28万
查看次数

递归或迭代?

如果我们在算法中使用循环而不是递归,反之亦然,那么两者是否可以起到同样的作用?例如:检查给定的字符串是否为回文.我已经看到许多程序员使用递归作为一种手段来展示一个简单的迭代算法可以适应账单.编译器在决定使用什么方面起着至关重要的作用吗?

language-agnostic algorithm recursion performance

215
推荐指数
11
解决办法
14万
查看次数

在Linux CLI中以递归方式列出文件,其中包含相对于当前目录的路径

这与此问题类似,但我想在unix中包含相对于当前目录的路径.如果我执行以下操作:

ls -LR | grep .txt
Run Code Online (Sandbox Code Playgroud)

它不包括完整路径.例如,我有以下目录结构:

test1/file.txt
test2/file1.txt
test2/file2.txt
Run Code Online (Sandbox Code Playgroud)

上面的代码将返回:

file.txt
file1.txt
file2.txt
Run Code Online (Sandbox Code Playgroud)

如何使用标准Unix命令将其包含在相对于当前目录的路径中?

unix linux recursion ls

215
推荐指数
6
解决办法
32万
查看次数

理解递归

我在学校理解递归方面遇到了很大麻烦.每当教授谈论它时,我似乎都能得到它,但是只要我自己尝试它就会彻底打动我的大脑.

我整晚都试图解决河内塔楼,并彻底打动了我的思绪.我的教科书在递归时只有大约30页,所以它不太有用.有谁知道可以帮助澄清这个主题的书籍或资源?

algorithm recursion tail-recursion

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

是log(n!)=Θ(n·log(n))?

我要显示log(n!)=Θ(n ·log(n)).

给出了一个提示,我应该用n n显示上限,并用(n/2)(n/2)显示下限.这对我来说似乎并不那么直观.那为什么会这样?我绝对可以看到如何将n n转换为n ·log(n)(即记录等式的两边),但这种情况是向后的.

解决这个问题的正确方法是什么?我应该绘制递归树吗?这没有任何递归,所以这似乎不是一个可能的方法..

algorithm math recursion complexity-theory big-o

202
推荐指数
6
解决办法
18万
查看次数

匿名递归PHP函数

是否可以使用递归和匿名的PHP函数?这是我试图让它工作,但它没有传递函数名称.

$factorial = function( $n ) use ( $factorial ) {
    if( $n <= 1 ) return 1;
    return $factorial( $n - 1 ) * $n;
};
print $factorial( 5 );
Run Code Online (Sandbox Code Playgroud)

我也知道这是实现阶乘的一种不好的方法,它只是一个例子.

php recursion lambda closures anonymous-function

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

究竟什么是折返函数?

大多数 时代,再进入的定义转引自维基百科:

如果计算机程序或例程在其先前的调用完成之前可以被安全地再次调用(即可以同时安全地执行),则将其描述为可重入的 .可重入,计算机程序或例程:

  1. 必须不保留静态(或全局)非常量数据.
  2. 不得将地址返回到静态(或全局)非常量数据.
  3. 必须仅对调用者提供给它的数据有效.
  4. 不能依赖于锁定单例资源.
  5. 不得修改自己的代码(除非在自己独特的线程存储中执行)
  6. 不得调用不可重入的计算机程序或例程.

如何安全地定义?

如果一个程序可以安全地同时执行,它是否总是意味着它是可重入的?

在检查我的代码是否具有重入功能时,我应该记住的六点之间的共同点是什么?

也,

  1. 所有递归函数都是可重入的吗?
  2. 所有线程安全功能都是可重入的吗?
  3. 所有递归和线程安全函数都是可重入的吗?

在写这个问题的时候,有一件事情浮现在脑海中:像重入线程安全这样的术语是否完全绝对,即他们是否有固定的具体定义?因为,如果他们不是,这个问题不是很有意义.

c c++ recursion thread-safety reentrancy

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

Python优化尾递归吗?

我有以下代码失败,出现以下错误:

RuntimeError:超出最大递归深度

我试图重写它以允许尾递归优化(TCO).我相信如果发生TCO,这段代码应该是成功的.

def trisum(n, csum):
    if n == 0:
        return csum
    else:
        return trisum(n - 1, csum + n)

print(trisum(1000, 0))
Run Code Online (Sandbox Code Playgroud)

我是否应该断定Python不执行任何类型的TCO,或者我只是需要以不同的方式定义它?

python stack-overflow recursion stack tail-recursion

182
推荐指数
5
解决办法
6万
查看次数

每次递归都可以转换成迭代吗?

一个reddit线程提出了一个显然有趣的问题:

尾递归函数可以简单地转换为迭代函数.其他的,可以通过使用显式堆栈进行转换.可每次递归转化为迭代?

帖子中的(计数器?)示例是对:

(define (num-ways x y)
  (case ((= x 0) 1)
        ((= y 0) 1)
        (num-ways2 x y) ))

(define (num-ways2 x y)
  (+ (num-ways (- x 1) y)
     (num-ways x (- y 1))
Run Code Online (Sandbox Code Playgroud)

language-agnostic iteration recursion

175
推荐指数
7
解决办法
7万
查看次数