相关疑难解决方法(0)

从递归到迭代的方法

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

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

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

theory iteration recursion computer-science

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

递归与迭代

说到处recursion都使用for循环是否正确?如果递归通常较慢,那么将其用于循环迭代的技术原因是什么?

如果始终可以将递归转换为for循环,那么可以采用经验法则吗?

iteration algorithm recursion

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

哪些递归函数不能使用循环重写?

据我所知,大多数递归函数可以使用循环重写.有些可能比其他人更难,但大多数都可以重写.

在哪些情况下,使用循环重写递归函数是不可能的(如果存在这样的条件)?

recursion

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

是否可以将所有递归函数重写为尾递归?

可能重复:
是否存在无法使用尾递归写入的问题?

根据我的理解,尾递归是一种优化,当递归调用不需要来自它将发送垃圾邮件的递归调用的信息时,您可以使用它.

那么可以使用尾递归实现所有递归函数吗?像DFS这样的东西,你需要最内层的孩子在父母可以之前返回?

algorithm recursion tail-recursion

18
推荐指数
2
解决办法
8241
查看次数

是否存在只有递归解决方案的问题?

可能重复:
是否存在仅具有递归解决方案的问题?
每次递归都可以转换成迭代吗?
命令式语言中"递归"的"必要"用法

是否有一个只有一个递归解决方案,那就是,有一个递归解决问题的问题,而是一个迭代的解决方案还没有被发现,或者更好的是,已被证明是不存在的(显然,这不是一个尾递归)?

algorithm recursion

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

如何在函数中修改数组?

MATLAB是一种按值传递的语言.我有一个处理像素邻居的递归函数.每次调用函数时,复制图像(在我的情况下是两个图像)是非常昂贵的.

我使用全局变量来解决问题.有没有其他方法可以使递归函数修改数组?

matlab pass-by-reference pass-by-value

14
推荐指数
2
解决办法
7913
查看次数

什么是Java中Fibonacci类序列的非递归解?

给出这个函数的伪代码

f(0) = 1; 
f(1) = 3; 
f(n) = 3 * f(n - 1) - f(n - 2); // for n >= 2.
Run Code Online (Sandbox Code Playgroud)

有这种非递归方式吗?

java algorithm math recursion

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

g ++中尾部递归的问题

我正在用C++搞乱尾递归函数,而且我在使用g ++编译器时遇到了一些麻烦.

numbers[]大小超过几百个整数时,以下代码导致堆栈溢出.检查由g ++生成的汇编代码,表明twoSum_Helper正在call对自身执行递归指令.

问题是以下哪一项导致了这种情况?

  • 我忽略了下面的一个错误,它阻止了尾递归.
  • 我使用g ++时出错了.
  • g ++编译器中检测尾递归函数的缺陷.

我正在g++ -O3 -Wall -fno-stack-protector test.c通过MinGW和g ++ 4.5.0在Windows Vista x64上进行编译.

struct result
{
    int i;
    int j;
    bool found;
};

struct result gen_Result(int i, int j, bool found)
{
    struct result r;
    r.i = i;
    r.j = j;
    r.found = found;
    return r;
}

// Return 2 indexes from numbers that sum up to target.
struct result twoSum_Helper(int numbers[], int size, int target, int i, …
Run Code Online (Sandbox Code Playgroud)

c++ recursion functional-programming tail-recursion g++

11
推荐指数
1
解决办法
1320
查看次数

是Dijkstra的算法,动态编程

我所见过的Dijkstra算法的所有实现都没有递归函数,但我还读到,根据定义,动态编程是一种具有递归函数和已计算事物的"记忆"的算法.

那么Dijkstra的算法是否具有作为动态编程的循环?
或者为了有资格作为动态算法,我必须将循环更改为递归函数.

algorithm recursion dijkstra

11
推荐指数
2
解决办法
1万
查看次数

可以将回溯尾递归算法转换为迭代吗?

让我们来看看Knight Tour问题吧.可以转换为迭代吗?困扰我的是回溯部分.如何在循环中回溯?当我从递归到迭代时,是否必须使用堆栈数据结构来实现回溯?


我在这里以更好的方式问了这个问题:有人能通过代码描述一个回溯迭代而不是递归的实际例子吗?

algorithm recursion tail-recursion data-structures

10
推荐指数
2
解决办法
4511
查看次数