2013-12-15 3 views
2

많은 참고 문헌을 살펴본 결과 C#이 람다를 통해 중첩 된 함수를 지원한다는 것을 알았지 만 C#과 .NET에 관해서는 완전히 새롭다. 중첩 된 자식에서 액세스 할 수있는 부모 함수의 매개 변수로 flood-fill 구현을 작성하려고합니다.재귀 함수 중첩 된 함수

는 여기가 이상적으로 어떻게 보일지입니다 : 내 혼란이 자리하고있는 곳

private void StartFloodFill(color,otherstuff,pixel) 
{ 
     function Recursion(pixel,color) 
     { 
      do(otherstuff); 
      //etc... 
      Recursion(pixel,color); 
     } 
} 

Recursion(pixel,color); 전화입니다. 함수 내부에서 함수에 대한 참조를 액세스 할 수 없습니다.

해결 방법이 있어야한다는 것을 알고 있지만 그게 무엇인지 알지 못합니다. C#에서 위에서 설명한 재귀 함수를 어떻게 구현할 수 있습니까?

+0

재귀 대표단? – SJuan76

+0

잘 모르겠다. 설명 할 수 있니? – Harangue

+0

왜 이렇게 닫습니까? 그것은 완벽하게 정당한 질문이며 그것에 대해 명확한 질문은 없습니다. 이 관용구는 항상 함수형 프로그래밍에 사용됩니다. – BitTickler

답변

4

제안 된대로 재귀 대리인을 사용할 수 있습니다. 일반적으로이 같은 대리자를 선언 할 것 :

Func<int, int, int> 2 개의 int 소요 대리인의 유형을, 그리고 또 다른 int를 돌려
Func<int,int, int> = (a, b) => a+b; 

.

하지만 스스로 호출하기를 원하기 때문에 위임을 할당하기 전에 변수를 선언해야합니다.

Func<Pixel, Color, SomeType> func = null; 

func = (pixel, color) => { 
    //do stuff... 

    if(endCondition) 
     return someTypeValue; 
    else 
     return func(pixel, color); 
}; 
+0

+1 : 함수에 변수 - [Anonymous Recursion in C#] (http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous)를 지정할 필요가 없습니다. -recursion-in-c.aspx) ...하지만 비 기능 프로그래머가 코드를 읽는 것을 기대한다면 - 변수를 먼저 선언하면 완전히 괜찮아집니다. 실수로 변수를 변경할 가능성에도 불구하고 좋습니다. –