Java 递归思想
今天说说递归思想,在我们编码时,有的时候递归能够让我们的算法更加通俗易懂,并且代码量也是大大的减少。比如我先前的系列中说到了
关于树的“先序,中序和后序”遍历,那么看看用递归来描叙这个问题是多少的简洁,多么的轻松。
#region 二叉树的先序遍历 /// <summary> /// 二叉树的先序遍历 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="tree"></param> public void BinTree_DLR<T>(ChainTree<T> tree) { if (tree == null) return; //先输出根元素 Console.Write(tree.data + "\t"); //然后遍历左子树 BinTree_DLR(tree.left); //最后遍历右子树 BinTree_DLR(tree.right); } #endregion #region 二叉树的中序遍历 /// <summary> /// 二叉树的中序遍历 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="tree"></param> public void BinTree_LDR<T>(ChainTree<T> tree) { if (tree == null) return; //优先遍历左子树 BinTree_LDR(tree.left); //然后输出节点 Console.Write(tree.data + "\t"); //最后遍历右子树 BinTree_LDR(tree.right); } #endregion #region 二叉树的后序遍历 /// <summary> /// 二叉树的后序遍历 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="tree"></param> public void BinTree_LRD<T>(ChainTree<T> tree) { if (tree == null) return; //优先遍历左子树 BinTree_LRD(tree.left); //然后遍历右子树 BinTree_LRD(tree.right); //最后输出节点元素 Console.Write(tree.data + "\t"); } #endregion
@Testpublic void testJC() {while (true) {// 阶乘问题System.out.println("请输入一个求阶乘的一个数:");Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();System.out.println("阶乘的结果为:" + fact(num));}}public int fact(int n) {if (n == 1)return 1;return n * fact(n - 1);}
private StringBuffer mm = new StringBuffer(); @Test public void testConvertToBinary() { int num = 100; convertToBinary(num); System.out.println("十进制数字:"+num+", 转换为二进制为:"+mm); } public void convertToBinary(int num) { int a = num % 2; num = num / 2; if (num > 0) { convertToBinary(num); } mm.append(a); }
@Test public void test3(){ int a = 100; String s =""; while(a>0){ s = a%2 + s; a /= 2; } System.out.println(s); }
@Test public void test2(){ int a = 100; System.out.println(Integer.toBinaryString(a)); }