C# 递归–;打印数字序列

C# 递归–;打印数字序列,c#,C#,这是顺序 1,1,2,4,7,11,16,22,29 需要使用递归函数打印上述系列 public static void PrintNumbers(int current, int index) { Console.Write(current + ", "); PrintNumbers(current + index, index + 1); } PrintNumbers(1, 0); 请注意,此恢复不会终止,因此运行它将导致StackOverflowException。类似以下内容:

这是顺序

1,1,2,4,7,11,16,22,29

需要使用递归函数打印上述系列

public static void PrintNumbers(int current, int index)
{
 Console.Write(current + ", ");

 PrintNumbers(current + index, index + 1);
}

PrintNumbers(1, 0);
请注意,此恢复不会终止,因此运行它将导致StackOverflowException。

类似以下内容:

public void Numbers(int iteration, int number, int limit)
{
  if(iteration < limit) {
    Console.WriteLine(number);
    Numbers(iteration + 1, number + iteration);
  }
}

Numbers(0,1,5);
public void number(整数迭代、整数编号、整数限制)
{
if(迭代<极限){
控制台写入线(编号);
编号(迭代+1,编号+迭代);
}
}
数字(0,1,5);

我甚至不会把它写成递归:

static IEnumerable<int> Generate() {
    int value = 1, inc = 0;
    while(true) {
        yield return value;
        value += inc++;
    }
}
你也可以用一种方法循环打印。。。但这其中的乐趣何在


(这种方法是为了展示一种有用的技巧,而不是直接用作家庭作业答案)

测试中的一个问题。。毫无疑问什么是停止条件。你总是需要一个停止条件,否则你会有堆栈溢出(真正的溢出)。那么,我相信你可以从那里着手;)+1:出色地使用了
IEnumerable
收益回报率
。学生们可以从这样的代码中学到比大多数测试题更多的东西:)@David-特别是当他们想到“这实际上是如何开始打印任何东西的?它不是永远先循环吗?”
foreach(int x in Generate().Take(n))
    Console.WriteLine(x);