使用oops概念从1到1000打印数字

时间:2016-09-08 08:52:31

标签: c# oop

如何使用oops概念(即不使用循环,数组和递归)从1到1000打印数字

2 个答案:

答案 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);
}