2016-07-03 2 views
0

자체에서 재귀 메서드를 호출하는 방법에 대해 혼란스러워합니다.비 정적 메서드에서 재귀 사용 - C#

class Program 
{ 
public static void main(String args[]) 
{ 
    Program p = new Program(); 
    p.Foo(); 
    } 

    Public ... Foo() 
    { 
    Foo(); 
    } 

내가 푸에서 푸를 호출하는 프로그램의 새 인스턴스를 만들 필요가 있는가 : 여기 은 샘플 코드? 내 코드는 인스턴스없이 작동하지만 올바른지 확실하지 않습니다.

감사

+1

아니요, 다른 인스턴스를 만들 필요가 없습니다. 메소드'Foo'는 현재 인스턴스의 컨텍스트에서 실행되므로 당연히 내부에서'Foo'를 호출 할 때 인스턴스를 지정할 필요가 없습니다. –

답변

1

당신은 Program의 새로운 인스턴스를 만들 필요가 없습니다,하지만 당신의 onlu이 staticFoo 방법을 선언합니다. 그대로 유지하면, Program의 새 인스턴스를 만들어야합니다. 정적 메서드에서 인스턴스를 생성하는 클래스를 가질 좋은 연습이 아니므로, 그렇지 않은 것이 좋습니다. 정적이 아닌 메서드 만 호출하면됩니다. 방법. 다음을 가져야합니다.

class Program 
{ 
public static void main(String args[]) 
{ 
    Foo(); //direct call to Foo 
} 

    public static ... Foo() 
    { 
    Foo(); 
    } 
} 
+0

결국이 코드는 작동하지 않습니다. –

+0

@SushilMate 왜 그렇게 말합니까? – meJustAndrew

+0

그것을 실행 해보십시오 :) –

0

아니요, 새 클래스를 만들 필요가 없습니다. 다음은 (단위 테스트) 예제입니다.

using Microsoft.VisualStudio.TestTools.UnitTesting; 
using System.Collections.Generic; 

namespace UnitTestProject 
{ 
    [TestClass] 
    public class UnitTest 
    { 
     public class Factorial 
     { 
      Dictionary<int, long> store = new Dictionary<int, long>(); 

      public long Get(int number) 
      { 
       if (store.ContainsKey(number)) 
       { 
        return store[number]; 
       } 

       if (number == 0) 
       { 
        store.Add(0, 1); 
        return 1; 
       } 

       var result = number * Get(number - 1); 
       store.Add(number, result); 

       return result; 
      } 
     } 


     [TestMethod] 
     public void SomeTest() 
     { 
      // Arrange 
      var target = new Factorial(); 
      var results = new List<long>(); 

      // Act 
      for (int i = 10; i >= 0; i--) 
      { 
       results.Add(target.Get(i)); 
      } 

      // Assert 
     } 
    } 
} 
관련 문제