相关疑难解决方法(0)

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万
查看次数

Ruby是一种功能语言吗?

维基百科说Ruby是一种功能语言,但我不相信.为什么或者为什么不?

ruby functional-programming

86
推荐指数
6
解决办法
2万
查看次数

Ruby:标准递归模式

我常常在ruby中加入的一件事是递归模式.例如,假设我有一个数组,并且可能包含数组作为无限深度的元素.所以,例如:

my_array = [1, [2, 3, [4, 5, [6, 7]]]]
Run Code Online (Sandbox Code Playgroud)

我想创建一个可以将数组展平的方法[1, 2, 3, 4, 5, 6, 7].

我知道.flatten会做这个工作,但这个问题是我经常遇到的递归问题的一个例子 - 因此我试图找到一个更可重用的解决方案.

简而言之 - 我猜这种东西有一个标准模式,但我无法想出任何特别优雅的东西.任何想法都赞赏

ruby recursion design-patterns

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

可以继续使用continuation作为递归的替代吗?

以下函数为n = 5,000生成"堆栈级别太深(SystemStackError)"

def factorial(n)
  n == 0 ? 1 : factorial(n -1) * n
end
Run Code Online (Sandbox Code Playgroud)

有没有办法使用continuation/callcc来避免这个错误?

注意:

我知道这可以在没有递归的情况下实现.例如

def factorial2(n)
  (1..n).inject(1) {|result, n| result * n } 
end
Run Code Online (Sandbox Code Playgroud)

ruby recursion continuations

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

这个python代码有什么问题,为什么它比ruby运行得那么慢?

我有兴趣比较ruby speed和python,所以我采用了最简单的递归计算,即打印fibonacci sequance.

这是python代码

#!/usr/bin/python2.7                       
def fib(n):
    if n == 0: 
        return 0
    elif n == 1:
        return 1 
    else:
        return fib(n-1)+fib(n-2)

i = 0
while i < 35:
    print fib(i)
    i = i + 1
Run Code Online (Sandbox Code Playgroud)

这是红宝石代码

#!/usr/bin/ruby

def fib(n)
    if n == 0
        return 0
    elsif n == 1
        return 1
    else
        fib(n-1)+fib(n-2)
    end
end 

i = 0 
while (i < 35)
    puts fib(i)
    i = i + 1 
end
Run Code Online (Sandbox Code Playgroud)

在几次运行中,时间报告此平均值

real    0m4.782s 
user    0m4.763s 
sys     0m0.010s
Run Code Online (Sandbox Code Playgroud)

多数民众赞成红宝石,现在python2.7给出

real …
Run Code Online (Sandbox Code Playgroud)

ruby python performance fibonacci

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