숙제로서, 나는 이진 검색 트리를 구현 중이며 일부 데이터의 위치를 검색하는 부분을 수행 중이며 (나중에 수정/제거 할 수 있음), 여기에 코드 :C++ 재귀 함수 반환 값
node*& bst::search(data& x, node*& pos) {
if (pos->get().num == x.num) {
return pos;
}
if (pos->right != NULL) search(x, pos->right);
if (pos->left != NULL) search(x, pos->left);
}
search(data_to_find, root)
을 호출합니다. 내 예제에서 나는이 양식의 정수의 나무했다 : 나는 소자 (3)을 검색하고 싶었 1. 루트 가리키는
1
2
3
을, 나는 3 포인터를 얻을 것으로 예상하지만, 매번되었다 이 함수는 루트 자체를 반환합니다. 그러면 foo가 값을 반환하지 않는 첫 번째 인스턴스와 관련이있을 수 있다고 생각 했으므로 search(x, pos->right)
을 return search(x, pos->right)
으로 변경하고 왼쪽은 같았습니다. 이번에는 모든 것이 정상적으로 수행되었습니다. 이것은 내가 그냥 진술이 거짓 인 경우, 그것은 스틸 사진의 경우에 반환 할 것을 지정하지 않은 있지만 그것은
int foo(int x = 0) {
if (x == 1) {
return x;
}
x++;
foo(x);
}
을 반환 이해하기 위해 다음과 같은 더미 기능을 몇 가지 실행을하려고 나를 혼동했다 분명히 오류 "값을 반환해야 foo는"는 결과
int boo() {
return 1;
}
int foo() {
boo();
}
및 foo()
라고 : 작품과 출력 1. 나는 foo(0)
그냥 어떤 foo(1)
내가이 시도 있는지 확인하기 위해 재귀 반환 반환 어쩌면 생각 boo()
에서 return boo()
으로 수정했습니다. 내 질문에 왜 첫 번째 사례가 뿌리를 출력합니까? 왜 두 번째 사례가 효과가 있습니까?
'return' 문없이'void'와는 다른 무언가를 반환하는 함수의 끝은 정의되지 않은 동작입니다. 운 좋게도 [비강 대몬] (http://www.urbandictionary.com/define.php?term=nasal%20demons)이 없었습니다! –
@ DietmarKühl 비강 deamons에 대한 참조 주셔서 감사합니다 :) –
'node * &'를 가져 와서 반환하는 것이 이상하게 보이지만'search'에 대한 재귀 호출의 결과로 아무 것도하지 않습니다 (따라서 유효한'return'을 가지고 있지 않습니다). – crashmstr