小编san*_*jay的帖子

是否可以在Python中编写递归函数

我已经在python中编写了一个verilog(逻辑门及其连接描述)模拟器作为实验的一部分.

我遇到了堆栈限制的问题,所以我做了一些阅读,发现Python没有"尾调用优化"功能(即随着递归的进行动态删除堆栈条目)

我在这方面主要有两个问题:

1)如果我提高了堆栈限制,sys.setrecursionlimit(15000)它是否会影响性能(内存 - 我不在乎)?

2)我有什么方法可以绕过这个限制,假设我可以没有堆栈跟踪.
我问这个是因为Verilog主要处理可以使用递归函数以优雅方式实现的状态机.

另外,如果我可以添加,在递归函数调用的情况下,如果有错误,我更依赖于导致此错误的输入而不是堆栈跟踪.

我是Python新手,所以也许专家可能认为Python堆栈跟踪对于调试递归函数调用非常有用......如果是这种情况,我会非常乐意学习如何做到这一点.

最后,建议在Python中编写递归函数还是应该转移到其他语言?

如果有任何解决方法,我可以继续使用python进行递归函数,我想知道是否有任何性能影响(我可以做分析).

python recursion

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

使用pdb的条件断点

听起来我错过了一些非常简单的东西,我试图在我的python代码中使用以下命令设置断点:

if(some condition):
        pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

我的代码中的错误是在大量迭代之后出现的......难以使用print等进行调试.当条件命中时我能够打印东西但是我想设置brk-pt.

- 编辑 -

实际代码:

import pdb
if (node_num == 16):
    print node_num
    pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)

python pdb

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

Perl十进制到二进制转换

我需要在Perl中将数字从十进制转换为二进制,其中我的约束是二进制数宽度由变量设置:

for (my $i = 0; $i<32; $i++)
{
    sprintf("%b",$i) # This will give me a binary number whose width is not fixed
    sprintf("%5b",$i) # This will give me binary number of width 5

    # Here is what I need:
    sprintf (%b"$MY_GENERIC_WIDTH"b, $i)
}
Run Code Online (Sandbox Code Playgroud)

我可以在我的打印语句中使用解决方法,但如果我可以执行上述操作,代码将更加清晰.

perl printf

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

Perl CPAN模块对象方法未找到错误

我正在尝试使用CPAN模块: Math::Vector::Real::Neighbors

我看到以下错误消息:

无法通过/usr/local/share/perl/5.14.2/Math/Vector/Real/Neighbors.pm第12行中的包"Math :: Vector :: Real"找到对象方法"box".

所以,我进入包中看到这个: my ($bottom, $top) = Math::Vector::Real->box(@_);

接下来,我进入Real.pm包裹:/usr/local/share/perl/5.14.2/Math/Vector/Real.pm

我看到盒子例程存在于其中: sub box {...

知道为什么错误可能会出现吗?

perl cpan

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

标签 统计

perl ×2

python ×2

cpan ×1

pdb ×1

printf ×1

recursion ×1