【发布时间】:2014-05-03 22:11:34
【问题描述】:
总的来说,我想问一下,
如果一个问题既可以通过命令式语言方式也可以通过函数式语言方式解决,与命令式语言相比,函数式语言会浪费内存,至少不会节省内存,因为 em>,函数语言大量依赖递归,递归压栈大量内存?
接着上面的问题,从内存优化的角度来看,如果一项工作可以用命令式语言完成,它不应该(至少不会比)使用函数式语言?
以上问题,其实来自一个算法问题:
保留堆栈而不使用额外空间:
void insert_at_bottom(node **stack, int data)
{
if( isempty(*stack) ){
push(stack,data);
return;
}
int temp=pop(stack);
insert_at_bottom(stack,data);
push(stack,temp);
}
void rev_stack(node **stack)
{
if( isempty(*stack) ) return;
int temp = pop(stack);
rev_stack(stack);
insert_at_bottom(stack,temp);
}
上述问题可以通过使用双递归来解决,在我看来,即使它没有在代码中使用额外的内存,它实际上“隐藏”了堆栈中的那些额外空间。
当然,我的问题更笼统,你不必专注于上面的具体问题。
感谢您的周到建议!
【问题讨论】:
-
阅读“尾递归”和相关概念。函数式语言可以进行一些有趣的优化,因为程序可以进行数学证明。
-
我知道“尾递归”,在这种情况下,命令式语言和函数式语言是等价的(尾递归可以转移到循环中)。但是,我的问题更侧重于内存效率,即。在一个巨大的数组中进行二分搜索...
-
我的意思是尾递归不需要额外的堆栈内存,所以仅仅使用函数式语言并不意味着使用更多的资源。
-
我同意你的看法。在这种情况下 Func.Lang。不比命令式差,但也不比命令式好,对吧?
标签: memory memory-management recursion functional-programming imperative-programming