zoukankan      html  css  js  c++  java
  • Recursion in Java

    Recursion in Java

    递归无出口

    public class RecursionExample1 {
        public static void p() {
            System.out.println("hello");
            p();
        }
    
        public static void main(String[] args) {
            p();
        }
    }
    

    运行结果

    ``` Exception in thread "main" java.lang.StackOverflowError ```

    递归有出口

    public class RecursionExample2 {
        public static int count = 0;
    
        public static void p() {
            count++;
            if (count <= 5) {
                System.out.println("hello " + count);
                p();
            }
        }
    
        public static void main(String[] args) {
            p();
        }
    }
    

    运行结果

    ``` hello 1 hello 2 hello 3 hello 4 hello 5 ```

    递归求阶乘

    public class RecursionExample3 {
        public static int factorial(int n) {
            if (n == 1) {
                return 1;
            } else {
                return (n * factorial(n - 1));
            }
        }
    
        public static void main(String[] args) {
            System.out.println("Factorial of 5 is: " + factorial(5));
        }
    }
    

    运行结果

    ``` Factorial of 5 is: 120 ```

    Fibonacci 系列

    public class RecursionExample4 {
        public static int n1 = 0, n2 = 1, n3 = 0;
    
        public static void printFibonacci(int count) {
            if (count > 0) {
                n3 = n1 + n2;
                n1 = n2;
                n2 = n3;
                System.out.print(" " + n3);
                printFibonacci(count - 1);
            }
        }
    
        public static void main(String[] args) {
            int count = 15;
            System.out.print(n1 + " " + n2);
            printFibonacci(count - 2);
        }
    }
    

    运行结果

    ``` 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 ```
    public class RecursionExample5 {
        public static void main(String[] args) {
            for (int i = 1; i <= 10; i++) {
                System.out.print(f(i) + " ");
            }
            System.out.println();
            for (int i = 1; i <= 10; i++) {
                System.out.print(f2(i) + " ");
            }
        }
    
        /**
         * 递归实现
         */
        public static long f(int n) {
            if (n == 1 || n == 2) {
                return 1;
            } else {
                return f(n - 1) + f(n - 2);
            }
        }
    
        /**
         * 非递归实现
         */
        public static long f2(int n) {
            int[] a = new int[n + 1];
            a[0] = 0;
            a[1] = 1;
            for (int i = 2; i <= n; i++) {
                a[i] = a[i - 1] + a[i - 2];
            }
            return a[n];
        }
    }
    

    运行结果

    ``` 1 1 2 3 5 8 13 21 34 55 1 1 2 3 5 8 13 21 34 55 ```

    参考资料

  • 相关阅读:
    win7环境下一次浅谈栈溢出
    字符约束条件的SQL注入攻击
    较有意思的Apple XSS(CVE-2016-7762)漏洞
    metasploit下Windows下多种提权方式
    NTFS ADS带来的web安全问题
    某安全团队内部渗透比赛
    MySQL注射绕过技巧(三)
    MySQL注射绕过技巧(二)
    MySQL注射绕过技巧
    centos7 zabbix3.4.6显示中文乱码问题
  • 原文地址:https://www.cnblogs.com/hgnulb/p/10092232.html
Copyright © 2011-2022 走看看