如何使用oops概念(即不使用循环,数组和递归)从1到1000打印数字
答案 0 :(得分:6)
由于您提到了OOP概念,其中之一就是封装。当方法完成工作时,你不关心实现细节。
几乎所有linq扩展方法在其实现中都使用循环(实际上是不同的迭代器),很容易没有意识到这是因为它是实现中封装的细节。
要回答你的问题,没有循环的唯一方法是写WriteLine调用1000次。
在OOP中,您创建一个类来封装逻辑然后使用它:
JWPlayerDelegate
没有循环吗?实际上,循环被封装在实现中。
class Program
{
static void Main(string[] args)
{
(new RangePrinter).PrintRange(1, 1001);
}
}
使用Enumerable(又名Linq扩展方法)同样适用:
class RangePrinter
{
/* Injecting the Write target is skipped for simplicity */
public void PrintRange(int lowerBound, int upperBound)
{
for(int i = lowerBound; i < upperBound; i++)
{
Console.WriteLine(i);
}
}
}
这里.NET Framework团队如何实现Range Internal Method:
Enumerable.Range(1, 1000).ToList().ForEach(x=> { Console.WriteLine(x); });
结论,当你需要重复工作时,你需要一个循环。任何迭代集合的C#API(Linq的Where,Select等等)都使用循环。除非不需要,否则循环也不错,或者当有其他方法时,它们会嵌套。
只是为了好玩,如果这是一个谜题(忘记OOP要求部分),那么你可以这样做:
static IEnumerable<int> RangeIterator(int start, int count) {
for (int i = 0; i < count; i++) yield return start + i;
}
答案 1 :(得分:0)
递归函数(DEF)是一个调用自身或处于函数调用的潜在循环中的函数。如定义所指定,有两种类型的递归函数。考虑一个调用自身的函数:我们称这种类型的递归为立即递归。
示例:强>
public static void PrintTo(int number)
{
if (number == 0)
return;
Console.WriteLine(number);
PrintTo(number - 1);
}
static void Main(string[] args)
{
PrintTo(1000);
}