2016-07-03 5 views
0

私は、それ自身から再帰的メソッドを呼び出すことに関してちょっと混乱します。ここ はサンプルコードです:非静的メソッドでの再帰の使用 - C#

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

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

iはフーからはFooを呼び出すために、プログラムの新しいインスタンスを作成する必要がありますか? 私のコードはインスタンスなしで動作しますが、正しいかどうかわかりません。

おかげ

+1

いいえ、別のインスタンスを作成する必要はありません。 メソッド 'Foo'はあなたの現在のインスタンスのコンテキストで実行されるので、当然' Foo'を内部から呼び出すとインスタンスを指定する必要はありません。 –

答えて

1

あなたはProgramの新しいインスタンスを作成する必要はありませんが、あなたのonluはstaticとしてあなたFooメソッドを宣言。そのままにしておくと、新しいインスタンスを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 
     } 
    } 
} 
関連する問題