由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - recursive中该用reference 还是普通变量传递?
相关主题
G电面电面,晕了
Non-recursive permutation求问两题思路
打印从根到叶子节点所有路径的问题准备不好面试就是会悲剧
C/C++里数组作函数的参数的话应该怎么写?g家店面面经,求bless
也问两个算法题one C++ question
一个stack怎么sort一个c++题(exception handling)
判断一个linked list是不是palindromeonsite归来,有一个c的问题不知道怎么回答(EE, CS请进)
Groupon一个店面题. sort with 3 stacks.问个C++ virtual function的问题
相关话题的讨论汇总
话题: arg话题: func话题: recursive话题: type话题: stack
进入JobHunting版参与讨论
1 (共1页)
f*********m
发帖数: 726
1
我知道如果函数func不是recursive的话,func(type arg)和func(type & arg)的区别
,比如func(int i)和func(int& i)。但func是recursive的话,用不用reference有什
么区别?
比如:
void func(type arg){
...
func(arg+1);
...
}

void func(type& arg){
...
func(arg+1);
...
}的区别?
recursive会创建很多stack overhead,这是不是说func(type arg)会创建很多arg的
local copy在stack里边,而func(type& arg)只会有一个arg itself?
谢谢。
d**e
发帖数: 6098
2
我觉得跟recursive没关系,区别应该是一样的。
但我觉得下面的例子不太好。arg+1应该是一个新的临时变量了。

【在 f*********m 的大作中提到】
: 我知道如果函数func不是recursive的话,func(type arg)和func(type & arg)的区别
: ,比如func(int i)和func(int& i)。但func是recursive的话,用不用reference有什
: 么区别?
: 比如:
: void func(type arg){
: ...
: func(arg+1);
: ...
: }
: 与

g*********e
发帖数: 14401
3
recursive会创建很多stack overhead,这是不是说func(type arg)会创建很多arg的
local copy在stack里边,而func(type& arg)只会有一个arg itself?
我觉的你说的没错。
reference就是一个指针吧,函数传递的就是指针。
不用ref的话,要是arg是一个很大的type,传递起来效率低,每次copy arg占用大量
stack空间。
f*********m
发帖数: 726
4
谢谢,重新给个例子:
void func(type arg){
...
arg += 1;
func(arg);
...
}
vs.
void func(type& arg){
...
arg += 1;
func(arg);
...
}
当然,传递效率是一个问题。除了这个以外,这两种用法在recursive中还会不会有其
他的不同,比如最终结果。感觉上是不用reference那么各个arg是独立的,不过在
stack理由很多的arg copy,他们的值不一定一样。而用了reference,stack中只有一个
arg,每一次对arg的修改都会影响到整个stack,因为整个stack中只有一个arg。不知我
的理解对否?
recursive应用中哪种arg更好呢?

【在 d**e 的大作中提到】
: 我觉得跟recursive没关系,区别应该是一样的。
: 但我觉得下面的例子不太好。arg+1应该是一个新的临时变量了。

d**e
发帖数: 6098
5
it depends.
主要是要看你的code是做什么,不是为了追求效率就一定传引用或指针,而是需要看
code里面有没必要修改arg,或者修改arg对整个method需要的结果有没影响。
比如quicksort那两个left和right,我觉得用不用引用应该都一样的,因为不影响后面
的结果。但比如说逆序打印数组, 就不需要传引用。
void printArray(int[] array, int index, int length)
{
if(index >= length)
return;
printArray(array, index+1, length);
cout << array[index] << " ";
}

【在 f*********m 的大作中提到】
: 谢谢,重新给个例子:
: void func(type arg){
: ...
: arg += 1;
: func(arg);
: ...
: }
: vs.
: void func(type& arg){
: ...

f*********m
发帖数: 726
6
“而是需要看code里面有没必要修改arg,或者修改arg对整个method需要的结果有没影
响。”
这确实不好把握。
不过,java是不是传递的都是引用?那么能不能认为传引用更普遍适用些?
1 (共1页)
进入JobHunting版参与讨论
相关主题
问个C++ virtual function的问题也问两个算法题
怎么在main()函数里面free我malloc()的空间一个stack怎么sort
Interview question::判断一个linked list是不是palindrome
问一个题Groupon一个店面题. sort with 3 stacks.
G电面电面,晕了
Non-recursive permutation求问两题思路
打印从根到叶子节点所有路径的问题准备不好面试就是会悲剧
C/C++里数组作函数的参数的话应该怎么写?g家店面面经,求bless
相关话题的讨论汇总
话题: arg话题: func话题: recursive话题: type话题: stack