2017-04-24 77 views
0

问题的措辞是 “Write a method writeSequence接受整数n作为参数并打印n个数字的对称序列,其中后接整数为1,结尾为1按升序整数从1开始,如下表所示:”使用递归打印出收敛和发散数字序列的故障

表基本上是:

1 = 1 
2 = 1 1 
3 = 2 1 2 
4 = 2 1 1 2 
5 = 3 2 1 2 3 
6 = 3 2 1 1 2 3 

我试图代码

public void writeSequence(int n){ 
    if (n < 1){ 
     throw new IllegalArgumentException(); 
    } 
    if (n == 1){ 
     System.out.print(n + " "); 
    } 
    else if (n == 2){ 
     System.out.print(1 + " " + 1 + " "); 
    } 
    else if (n % 2 == 0){ 
     System.out.print(n - (n/2) + " "); 
     writeSequence(n - (n/2)); 
     System.out.print(n - (n/2) + " "); 
    } 
    else{ 
     System.out.print(n-(n/2) + " "); 
     writeSequence(n - 2); 
     System.out.print(n-(n/2)+ " "); 
    } 
} 

对于输入1-10,我的代码没有为6,8和10生成正确答案。任何帮助都非常感谢。

编辑:在标题

编辑2

固定拼写:

我的结果是

1 = 1 
2 = 1 1 
3 = 2 1 2 
4 = 2 1 1 2 
5 = 3 2 1 2 3 
6 = 3 2 1 2 3 (wrong) 
7 = 4 3 2 1 2 3 4 
8 = 4 2 1 1 2 4 (wrong) 
9 = 5 4 3 2 1 2 3 4 5 
10 = 5 3 2 1 2 3 5 (wrong) 

如果有人能告诉我在哪里我已经在我的代码中的错误会很好!

+0

*我的代码没有产生正确答案为6,8,和10 * - 究竟是什么做的,什么应该的做? – Bohemian

+0

我在最后添加了一个编辑,显示我的结束表是什么样子,看起来应该是什么样子! – mikecal7

+0

请参阅:[为什么“有人可以帮助我?”不是真正的问题?](http://meta.stackoverflow.com/q/284236) – EJoshuaS

回答

2

您的递归调用传递不正确的值。每次算法递归时,它应该减少2的值。

更改此:

writeSequence(n - (n/2)); 

这样:

writeSequence(n - 2);