C# 递归–;打印数字序列
这是顺序 1,1,2,4,7,11,16,22,29 需要使用递归函数打印上述系列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。类似以下内容:
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);