相关疑难解决方法(0)

递归或迭代?

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

language-agnostic algorithm recursion performance

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

递归或迭代?

我喜欢递归.我认为它简化了很多事情.另一个可能不同意; 我认为这也使代码更容易阅读.但是,我注意到递归在C#等语言中并没有像在LISP中那样被使用(顺便提一下,这是我最喜欢的语言).

有没有人知道是否有任何好的理由不使用C#等语言的递归?它比迭代更昂贵吗?

language-agnostic iteration optimization recursion

29
推荐指数
6
解决办法
1万
查看次数

F#尾递归,为什么不写while循环?

我正在学习F#(一般来说是功能编程的新手,虽然多年来使用C#的功能方面,但让我们面对它,这是非常不同的)我读过的一件事是F#编译器识别尾递归并编译它进入一个while循环(参见http://thevalerios.net/matt/2009/01/recursion-in-f-and-the-tail-recursion-police/).

我不明白的是,为什么你会写一个递归函数而不是一个while循环,如果那就是它将会变成什么.特别是考虑到你需要做一些额外的工作来使你的函数递归.

我有一种感觉,有人可能会说while循环不是特别功能,你想要所有功能和诸如此类的东西,所以你使用递归,但那么为什么编译器将它变成while循环就足够了?

谁可以给我解释一下这个?

f# tail-recursion

11
推荐指数
3
解决办法
1624
查看次数

函数式编程中的无限循环?

  • 我想知道:在函数式编程中可以完成无限循环吗?

示例:当使用Windows API获取Windows消息时,通常在循环中实现.

我知道有可能创建一个将无限期地进入递归的函数.我希望这会导致堆栈溢出.

  • 无限循环错误的功能编程思维定势?

  • 是操作系统的接口还是硬件的问题?

在我看来,功能程序/操作系统似乎不能单独运行

我在编写功能程序方面有一点经验,但这一直困扰着我.请分享您对这些问题的想法/见解

recursion loops functional-programming

8
推荐指数
2
解决办法
2920
查看次数

我怎样才能表达一个阶乘n!使用F#函数,递归还是其他?

自然数的阶乘(任何大于或等于的数0)是该数乘以其自身的阶乘减去1,其中阶乘0被定义为1.

例如:

0! = 1
1! = 1 * 0!
2! = 2 * 1!
3! = 3 * 2!
4! = 4 * 3!
5! = 5 * 4!
Run Code Online (Sandbox Code Playgroud)

写这个的另一种方式是乘之间的所有自然数1nn!:

5! = 1 * 2 * 3 * 4 * 5
Run Code Online (Sandbox Code Playgroud)

如何用F#中的递归函数表达这个?我应该用递归函数来做吗?

//Factorials!
let factorial n = 
    result = ?
Run Code Online (Sandbox Code Playgroud)

recursion f# tail-recursion factorial

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

返回列表中位置x的项目

在F#中阅读这篇文章的时候还是Tail Recursion,什么时候用?有几个人说,做事的"功能方式"是使用map/folds和高阶函数而不是递归和循环.

我有这个函数返回列表中位置x的项目:

let rec getPos l c =  if c = 0 then List.head l else getPos (List.tail l) (c - 1)
Run Code Online (Sandbox Code Playgroud)

如何将其转换为更具功能性?

f# tail-recursion

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