Java练习:递归的实操

Java学习:递归的实操
递归就是直接或者间接调用滋生。需要注意的就是,一定要有一个判断条件让这个死循环结束。
Java学习递归实操训练一:
利用递归算出10的阶乘:
此方法是常规方法:<主要用作和下面用递归的对比>
public static void main(String[] args) { // 非递归,十的阶乘 System.out.println(results(10)); } public static int results(int x) { int sum = 1; for (int i = x; i > 1; i--) { sum *= i; } return sum; }
此方法为递归方法:
public static void main(String[] args) { // 递归,十的阶乘 System.out.println(results(10)); } public static int results(int x) { if(x == 1) { return 1; } return results(x - 1) * x; }
Java控制台输出结果为:3628800
利用递归算出100的阶加:
此方法为阶加方法:
public static void main(String[] args) { // 递归,十的阶加 System.out.println(results(100)); } public static int results(int x) { if(x == 0) { return 0; } return results(x - 1) + x; }
Java控制台输出结果为:5050
利用递归玩游戏 - 汉诺塔(相对比较难):
将 柱子A 中的所有套圈转移到 柱子C 上。
思路:利用递归思路,把套圈假设为 n 个,将 n 转换 成 n - 1 的问题:
public static void main(String[] args) { // 递归 game('A', 'B', 'C', 3); } public static void game(char a, char b, char c, int n) { if (n == 1) { System.out.println(a + "=>" + b); return; } // 将第n-1个由A=>C game(a, c, b, n - 1); // 将第n个由A=>B System.out.println(a + "=>" + b); // 将第n-1由C=>B game(c, b, a, n - 1); }
Java控制台输出结果:
A=>B A=>C B=>C A=>B C=>A C=>B A=>B
这就是将3层的汉诺塔移动的步骤。
接下来我们也能用递归解决我们之前遇到的问题:输出数列1 1 2 3 5 8 13 21 34 55...第25项的值
如果想要查看使用 非递归来解决请点击→→→《输出数列1 1 2 3 5 8 13 21 34 55...第25项的值》←←←
下面使用递归解决:
刘广法整理的思路,第 n 项的值等于第(n-1)的项和第(n-2)的项的和。
public static void main(String[] args) { // 递归:输出数列1 1 2 3 5 8 13 21 34 55...第25项的值 System.out.println(sum(5)); } public static int sum(int n) { if (n == 1 || n + 1 == 1) { return 1; } return sum(n - 1) + sum(n - 2); }
Java控制台的输出结果:8
文章原创作者:刘广法,感谢转载,网站地址:https://liuguangfa.com/