avatar
y*3
1
如果题目中要求只能用constant memory,或者要求空间复杂度是O(1),是不是就不能
用recursion了?
avatar
y*3
2
没有人知道吗?。。。跪求!
avatar
b*o
3
和语言实现有关,像Lisp这样的FP语言,尾递归可以是constant memory。

【在 y*****3 的大作中提到】
: 如果题目中要求只能用constant memory,或者要求空间复杂度是O(1),是不是就不能
: 用recursion了?

avatar
y*3
4
谢谢!那如果我用java写,要求Constant memory的话肯定不可以用递归了?

【在 b*****o 的大作中提到】
: 和语言实现有关,像Lisp这样的FP语言,尾递归可以是constant memory。
avatar
j*6
5
尾递归实现和语言没关系吧?(理解不对的话求大牛指正) 不过一般情况下递归都不
是尾递归
所以就用循环之类的写吧~
avatar
A*g
6
有关系,尾递归是指每个function call的最后一步是call这个function自己,所以前
面stack的内容和后面计算没关系,就可以不存前面stack里的内容了,LISP的解析器或
编译器会做这样的优化
(define (sum start end)
(if (= start end) start
(+ start (sum (+ start 1) end))))
同样的写法,Java或C++一般还是会存整个stack,然后一层层返回
int sum(int start, int end) {
if (start==end)
return start;
else
return start+sum(start+1, end);
}
Java/C++ 如果用loop的话,就不用stack了
int sum(int start, int end) {
int sum = 0;
for (int i=start; i<=end; i++)
sum+=i;
return sum
}

【在 j*********6 的大作中提到】
: 尾递归实现和语言没关系吧?(理解不对的话求大牛指正) 不过一般情况下递归都不
: 是尾递归
: 所以就用循环之类的写吧~

avatar
b*o
7
恩,Java的递归是基于stack的,所以不可能是constant memory。

【在 y*****3 的大作中提到】
: 谢谢!那如果我用java写,要求Constant memory的话肯定不可以用递归了?
avatar
g*e
8
跟compiler有关

【在 j*********6 的大作中提到】
: 尾递归实现和语言没关系吧?(理解不对的话求大牛指正) 不过一般情况下递归都不
: 是尾递归
: 所以就用循环之类的写吧~

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。