귀환 중 귀환

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

좋은 웹페이지 즐겨찾기