在非静态方法中使用递归- 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?我的代码工作没有实例,但我不确定它是否正确。
谢谢
您不需要创建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
}
}
}