Cracking the Interview - 递归

用最基本的 Fibonacci 数列就可以说明白了

Java Solution of Fibonacci Number

import java.util.*;
public class Solution {
    //recusive
  /*  public static int fibonacci(int n) {
       if (n == 0)
           return 0;
        else if (n == 1)
            return 1;
            else
            return fibonacci(n-1) + fibonacci(n-2);  
        // Complete the function.
    }
*/
    // non-recusive
    public static int fibonacci(int n){
       int tmp1,tmp2,summary;
       summary = 1;
       tmp1 = 0;
        tmp2 = 1;
        if(n<=1)
            return n;
        for(int i = 2; i < n; i++ ){
            tmp1 = tmp2;
            tmp2 = summary;
            summary = tmp1 + tmp2;
        }
        return summary;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        scanner.close();
        System.out.println(fibonacci(n));
    }
}

需要注意的是时间复杂度, 递归的时间复杂度远远大于非递归的时间复杂度。递归的时间复杂度是 O(n^1.618),空间复杂度是 O(1)。 而非递归的时间复杂度是 O(n),空间复杂度是 O(1)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容