PIE Chapter 7 -- Recursion递归- Java

来源:互联网 发布:手机淘宝看实名认证 编辑:程序博客网 时间:2024/06/06 05:06

【程序员面试攻略】一书中的第七章代码:

public class Ch7{/* * factorial: recursively */public int fac(int n){if(n == 1) return 1;elsereturn n*fac(n-1);}/* * factorial: iteratively */public int fac_iterate(int n){int result = 1;for(int i = n; i > 0; --i){result *= i;}return result;}/* * calculate the permutation of a string * eg: abc will get: abc, acb, bac,bca,cab,cba. */public void permute(String str){int length = str.length();boolean[] used = new boolean[length];StringBuffer out = new StringBuffer();char[] in = str.toCharArray();doPermute(in, out, used, length, 0);}private void doPermute(char[] in, StringBuffer out, boolean[] used, int length, int level){if(length == level){System.out.println(out.toString());}for(int i = 0; i < length; ++i){if(used[i]) continue;out.append(in[i]);used[i] = true;doPermute(in, out, used, length, level+1);used[i] = false;out.setLength(out.length() - 1);}}/* * combination of a string * eg.: abc will get: a,ab,abc,ac,b,bc,c */public void combine(String str){int length = str.length();char[] instr = str.toCharArray();StringBuffer outstr = new StringBuffer();doCombine(instr, outstr, length, 0, 0);}private void doCombine(char[] instr, StringBuffer outstr, int length, int level, int start){for(int i = start; i < length; ++i){outstr.append(instr[i]);System.out.println(outstr.toString());if(i < length-1){doCombine(instr, outstr, length, level+1, i+1);}outstr.setLength(outstr.length() -1); }} }




原创粉丝点击