常见的几道关于递归的JAVA面试题
2015-06-22 23:05
603 查看
</pre><pre name="code" class="java">1、把一个数组里的数组全部列出,比如1和2列出来为1,2,12,21.
import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * 把一个数组里的数组合全部列出,比如1和2列出来为1,2,12,21; * @author Administrator * */ public class Test01 { /** * 列出LinkedList集合中所有的组合 * 去掉注释后显示取出所有的数字后的组合 */ static int n = 0; public static void listAll(List<Integer> list,String prefix){ if(prefix!=""){ //if(list.isEmpty()){ System.out.print(prefix+" "); //} n++; } //每输出4个换一行 if(n%4==0 && n!=0){ System.out.println(); } for(int i=0;i<list.size();i++){ List<Integer> tmp = new LinkedList<Integer>(list); listAll(tmp,prefix+(tmp.remove(i)+"")); } } public static void main(String[] args) { Integer[] arr = {1,2,3,4,5}; List<Integer> list = Arrays.asList(arr); List<Integer> temp = new LinkedList<Integer>(list); listAll(temp,""); } }
2、试用递归的方法编程计算斐波那契数列的通项f(n)
/** * 试用递归的方法编程计算斐波那契数列的通项f(n)。 * @author Administrator * */ public class Test02 { public static long f(long n){ if(n==0||n==1){ return n; } return f(n-1)+f(n-2); } public static void main(String[] args) { long t1=System.currentTimeMillis(); System.out.println(f(43)); long t2=System.currentTimeMillis(); System.out.println(t2-t1); } }3、利用1、2、2、3、4这5个数字,用Java写一个main函数,打印出所有不同的排列,如12234、21234等,要求打印出来的不能有重复。
import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * 利用1、2、2、3、4 * @author Administrator * */ public class Test04 { public static void listAll(List<String> list,String prefix){ if(list.isEmpty()){ System.out.println(prefix); } boolean[] flag = {true,true}; for(int i=0;i<list.size();i++){ List<String> temp = new LinkedList<String>(list); String suffix = temp.remove(i); if(suffix=="2"){ if(flag[0]){ flag[0] = false; }else{ //第二次取到2将flag[1]置为false flag[1] = false; } } if(suffix!="2" || flag[1]){ listAll(temp,prefix+suffix); } } } public static void main(String[] args) { String[] arr = {"1","2","2","3","4"}; listAll(Arrays.asList(arr),""); } }
相关文章推荐
- 黑马程序员——Java基础:内部类、异常、包
- 黑马程序员——Java中的枚举
- 黑马程序员--迷宫小游戏
- 黑马程序员---2015.6.22java基础笔记---Collections---Arrays---方法的可变参数---常用类介绍
- 黑马程序员--定义枚举
- 黑马程序员--数组、字符串
- 黑马程序员——Java语言基础语法(一)
- 黑马程序员--递归方法参数的自增自减
- 常见的sql面试题
- PHP 程序员如何设计一个爬虫程序
- 黑马程序员——变量、printf函数、scanf函数
- 黑马程序员--多线程--5th
- 黑马程序员——高新技术---反射
- 黑马程序员——初识JAVA
- 黑马程序员---iOS编程效率提高必备
- 实习面试题目总结一
- 微软经典的算法面试100题之32题
- SQL面试题
- 黑马程序员--java反射学习笔记
- ETL架构师面试题(这篇文章太棒了)