2010-11-24 217 views
0

此序列是序列递归 - 打印数

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

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

+6

从实验中的一个问题..毫无疑问的。 :) – 2010-11-24 18:00:30

+0

什么停止条件。你总是需要停止条件,否则你会有堆栈溢出(真正的)。 – 2010-11-24 18:02:10

回答

2

事情是这样的:

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

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

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

PrintNumbers(1, 0); 

请注意,这recusion不会终止,所以运行它将导致StackOverflowException。

6

我不会把它写成递归:

static IEnumerable<int> Generate() { 
    int value = 1, inc = 0; 
    while(true) { 
     yield return value; 
     value += inc++; 
    } 
} 

递归一般是坏的,如果过深...然后:

foreach(int x in Generate().Take(n)) 
    Console.WriteLine(x); 

你也可以只用一种方法循环和打印......但那里有趣吗?

(这种方法选择故意以显示有用的技术,而不是被directy可用作家庭作业的答案)