在非静态方法中使用递归- c#

本文关键字:递归 静态方法 | 更新日期: 2023-09-27 17:54:05

我对从自身调用递归方法有点困惑。下面是一个示例代码:

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

我需要创建程序的新实例从Foo调用Foo?我的代码工作没有实例,但我不确定它是否正确。

谢谢

在非静态方法中使用递归- c#

您不需要创建Program的新实例,但您必须将Foo方法声明为static。如果您保持原样,您将需要创建Program的新实例,我建议您不要这样做,因为让一个类在静态方法中实例化自己,只调用非静态方法并不是一个好的实践。你应该有:

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

不,您不必创建新类。下面是一个(unittest)示例:

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
        }
    }
}