귀환 중 귀환
6773 단어 swift
1 var value=[1,2,3,4,5,6];
2 var result=[];
3 var i;
4 function find(i){
5 if(i<4){
6 result[i]=value[i]
7 find(i+1);
8 }
9 else
10 return result;
11 }
12 find(0);
이 코드는undefined로 되돌아옵니다. 되돌아오는 값이 명확하지 않기 때문입니다. 우선find(0)를 호출한 것이고find(0)는 되돌아오는 값이 없습니다. 그returnresult는find(0)의 되돌아오는 값이 아닙니다. 이것은if문장의 조건이 충족되지 않은 후의 되돌아오는 문장입니다. f(0)에서 우리는else분지에 들어가지 않았습니다. 당신은find(0)를 호출하고 이것은find(1)를 계속 호출한 다음에 조건이 충족되지 않습니다.문장이 끝났습니다. 귀속된find(4)는else분지에 들어가지 않습니다!!이것은 if{}에서 더 이상 호출하지 못하게 할 뿐입니다!!!그래서 리턴이 없어요!find(0) 문장 호출에서 우리는 값을 되돌려 주지 않았기 때문에undefined가 나타날 수 있다. 마찬가지로 우리는 이렇게 코드를 수정할 수 있다.
1 var value=[1,2,3,4,5,6];
2 var result=[];
3 var i;
4 function find(i){
5 if(i<4){
6 result[i]=value[i]
7 find(i+1);
return result;
8 }
9 else
10 return result;
11 }
12 find(0);
이렇게 하면 리턴이 호출되었습니다.find(0)가result를 되돌려주지 않았고,find(4)의returnresult가 필요합니다. 따라서if{}에return을 추가합니다.리턴이 호출된 리턴은 마지막으로 호출된return입니다. 수정 코드는 다음과 같습니다.
1 var value=[1,2,3,4,5,6];
2 var result=[];
3 var i;
4 function find(i){
5 if(i<4){
6 result[i]=value[i];
7 return result;
8 find(i+1);
9
10 }
11 else
12 return result;
13 }
14 find(0);
이렇게 하면 1만 되돌아옵니다. 한 번만 호출하면 되돌아오기 때문에 함수는 곧 멈추고, 이전의 변법은 모든 호출이 완료될 때까지 기다려야 되돌아옵니다.
우리는 귀환에 대한 우리의 견해를 증명하기 위해 다시 수정할 수 있다.
1 var value=[1,2,3,4,5,6];
2 var result=[];
3 var i;
4 function find(i){
5 if(i<4){
6 result[i]=value[i];
7 find(i+1);
8
9 }
10 else;
11 return result;
12 }
13 find(0);
우리는else 뒤에 빈 문장을 추가한 것을 보았습니다.find(0)는 호출이 끝난 후의result 값을 되돌려줍니다.
또 하나의 오류는 우리가 이렇게 코드를 쓰면
var value=[1,2,3,4,5,6];
var result=[];
var i;
function find(i){
if(i<4){
result[i]=value[i];
find(i+1);
}
else;
return result[i];
}
find(0);
우리도undefined로 되돌아오는 것을 발견했다. 여기서 우리는 매우 중요한 점을 오해했다. 이곳의 i는 계수의 i가 아니라 매개 변수이다. 이것은 형참부치 이후에 없어졌기 때문에result[i]를 사용할 수 없다. 그러면 항상result[0]로 되돌아간다. 이런 두 오류를 종합한 문법은
1 var value=[1,2,3,4,5,6];
2 var result=[];
3 var i;
4 function find(i){
5 if(i<4){
6 result[i]=value[i]
7 find(i+1);
8 }
9 else
10 return result[i];
11 }
12 find(0);
먼저if 자체가 실행되면 되돌아오는 값이 없기 때문에undefined를 되돌려줍니다. 게다가return도returnresult[0]
전재 대상:https://www.cnblogs.com/admos/p/4444419.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
백그라운드에서 값을 계산하고 Swift 동시성 이후에 결과 사용값을 계산해야 하고 메인 스레드를 차단하지 않으려면 계산된 값을 반환하는 Swift Task 구조에서 해당 값을 계산하면 됩니다. Swift 동시성 이전에는 백그라운드 대기열로 이동하여 필요한 값을 계산하고 필요한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.