一个reddit线程提出了一个显然有趣的问题:
尾递归函数可以简单地转换为迭代函数.其他的,可以通过使用显式堆栈进行转换.可每次递归转化为迭代?
帖子中的(计数器?)示例是对:
(define (num-ways x y)
(case ((= x 0) 1)
((= y 0) 1)
(num-ways2 x y) ))
(define (num-ways2 x y)
(+ (num-ways (- x 1) y)
(num-ways x (- y 1))
Run Code Online (Sandbox Code Playgroud) 如何使用Bloodshed Dev C++或Code :: Block正确增加程序可用的堆栈?我运行简单的泡泡和快速排序工作,但当我更改Code :: Block中的堆栈(发现如何在这里)它使我的程序崩溃更快,尽管使用远远超过建议的空间.最初,程序在排序64K随机整数时崩溃(使用该rand()函数).现在,它崩溃在32K.我得到错误:Process returned -1073741571 (0xC00000FD)
假设我做得对,程序实际上运行得更快,而不会改变堆栈. gcc -Wl,--stack,1099511627776
我无法弄清楚如何在Dev C++中改变它
我该怎么办?有没有办法在代码本身内更改堆栈?这是我用于泡泡和快速排序的代码.每个都有两个:一个是矢量,另一个是数组.我认为泡沫排序.应该是正确的.快速排序,我不太确定.对不起,如果它有点凌乱
vector <int> v_bubble(vector <int> array){
// Vector Bubble Sort
if (array.size() < 2){
return array;
}
int s = 1;
while (s){
s = 0;
for (unsigned int x = 0; x < (array.size() - 1); x++){
if (array[x] > array[x + 1]){
int t = array[x];
array[x] = array[x + 1];
array[x + 1] = t;
s = …Run Code Online (Sandbox Code Playgroud)