集算器递归改写法了,真好!
😄 😄 无意中发现 spl 的递归改写法了,以前调用递归的时候必须写成 func(fx,x,y),现在可以直接写成 fx(x,y) 了,这个改的太好了,小小的改动,语句简洁了不少。如下所示:
以前的递归写法,每一次调用,都要写成 func(dfs,x,y):
现在的写法,可以省略 func() 这部分,直接写成递归名称:
这个改的好,好的很👍 👍 ,哈哈,谢谢老贼,谢谢 SPL 的大佬们🙏 🙏
说起递归,我还有一个关于递归堆栈大小的问题。递归很容易爆栈,因为默认的堆栈大小是有限制的,有个治标不治本的办法就是把堆栈大小适当调大一点,尽可能延迟爆栈。集算器也可以调整堆栈大小的,对吧,我不知道这样调整会不会有其他问题出现,比如,在 Mac 版本的集算器里可以这样调整,在安装目录下的 bin 文件夹里有搁 config.txt 文件,加上 -Xss8m 就可以了:
这样调整后就能延迟爆栈了,集算器也能正常工作。
但是,同样的手法应用于 WIN 版本的集算器里,也是在安装目录下的 bin 文件夹中的 config.txt 里添加一样的内容,结果就出问题了,直接导致 jvm 出错,打不开集算器。这个出错内容我没有截图保存,我也不敢尝试了,因为卸载安装有点耗时😂。我的问题是:
1、这样操作是不是不科学,毕竟是治标不治本的方法;
2、如果非要调整堆栈大小,WIN 版本的集算器里要如何写;
3、最好是用代码来改善递归爆栈,虽然迟早都会爆栈,但比调整堆栈大小要科学一些,对吧,那集算器 spl 要如何写代码才能最大程度延迟递归的堆栈溢出。比如,JS 里有一种方法叫 "蹦床"Trampoline,可以让尾递归变成循环,我在 PQ 里倒是模拟出来了,但 spl 不知道怎么写:
大佬们方便的时候能不能指导一下?
本地测试 windows 版集算器,config.txt 中增加 -Xss8m 后,集算器 ide 可以正常启动的,请您再确认下编辑是否正确
大佬请看,我用的是桌面版,里边就这么点内容,当然目前是正常的。
请问 -Xms5120m -Xmx5120m -Xss8m 这 3 组之间是有空的对吧?
我知道原因了,握艹,就是这个空格,记事本里肉眼观察时,还以为中间没有空格,直接无缝写上去了。😳
可以了,麻烦大佬了🙏
卧了个槽啊,真是空格原因,国庆前崩溃一下午,搞得我不敢再测试。
“-Xms5120m -Xmx5120m -Xss8m”