使用递归打印所有数字序列

时间:2014-09-29 19:06:00

标签: java algorithm recursion

所以我在计算机算法类中有这个赋值: 编写递归算法,给定正整数n> = 1,打印全部 数字序列 k> = 1且1< = i1< i2< ...< ik< = n。 例如:如果n = 3,那么输出将是

1

1,2

1,2,3

1,3

2

2,3

3

我试图用Java编写这个赋值的递归代码,但我不知道如何处理这个问题。我理解递归的基础知识,但我自己编写递归代码时遇到了麻烦。

这就是我现在所拥有的:

public class question4
{  
    public static void main(String arg[]){
        int x = 10;
        printSequence(x);
    }
   public static int printSequence(int n){
       if (n == 1){
           System.out.println(n);
           return n;
       }
       else{
           int result = printSequence(n-1) + 1;
           System.out.println(result);
           return result;
       }
   }

} 

它只打印1,2,3,4,5,6,7,8,9,10

请帮助我!

提前谢谢!

3 个答案:

答案 0 :(得分:2)

基本上,以n = 5为例,您应该打印两种间隔

 1          | full interval
 1 2        |
 1 2 3      |
 1 2 3 4    |
 1 2 3 4 5  |

 1 _ 3 4 5  | concatenation of full interval (1 -> i) with (i+1 -> n)
 1 2 _ 4 5  |
 1 2 3 _ 5  |

 1 _ _ 4 5  | concatenation of full interval (1 -> i) with (i+2 -> n)
 1 2 _ _ 5  | 

 1 _ _ _ 5  | concatenation of full interval (1 -> i) with (i+3 -> n)
 ---------------------
   2        | full interval
   2 3      |
   2 3 4    |
   2 3 4 5  |

   2 _ 4 5  | concatenation of full interval (1 -> i) with (i+1 -> n)
   2 3 _ 5  |

   2 _ _ 5  | concatenation of full interval (1 -> i) with (i+2 -> n)
 ---------------------
     3      | full interval
     3 4    | 
     3 4 5  |

     3 _ 5  | concatenation of full interval (1 -> i) with (i+1 -> n)
 ---------------------
       4    | full interval
       4 5  |

         5  | concatenation of full interval (breaks here)

然后,你要做的是:

1-打印整个时间间隔from = 1to = n
2-迭代用“负”部分连接两个间隔
3-再次调用递归(from++, to)

的递归方法

希望有所帮助

答案 1 :(得分:1)

从最右边的元素开始并继续向左移动直到达到1(递归的基本情况)。在基本情况下,返回“1”。 现在开始自下而上构建组合。函数foo返回字符串的数组列表。在递归的每个级别,有三个部分。 Part1是前一次调用foo返回的数组列表;在part2中,nfoo上一次调用返回的所有元素追加到part3;最后在n中,将import java.util.*; class Sequence { public static ArrayList<String> foo(int n) { if(n==1) { ArrayList<String> a = new ArrayList<String>(); a.add("1"); return a; } ArrayList<String> withOutN = foo(n-1); ArrayList<String> out = new ArrayList<String>(); Iterator<String> it = withOutN.iterator(); Integer i = new Integer(n); while(it.hasNext()) { String s = it.next(); out.add(s); s = s.concat("," + i.toString()); out.add(s); } out.add(i.toString()); return out; } public static void main(String[] args) { int n=4; ArrayList<String> out = new ArrayList<String>(); out = (ArrayList<String>) foo(n); Iterator<String> it = out.iterator(); while(it.hasNext()) { System.out.println(( it.next()) ); } } } 追加到数组列表中。

{{1}}

答案 2 :(得分:0)

从集{a, b, c, ...}开始,您希望{a}{}以递归方式加入{b, c, ...}的所有子集。