网上一搜,都是各种条件设限分情况判断的。。。。。。当时没考虑到f(n-3)需要乘以两倍的情况,网上也搜不到类似的解法,现在总算搞明白了。 既然必须是偶数步,就把两步合一步,每一个大步都有2,3,4三种可能,其中3是有先1后2和先2后1两种。因此——
public class Test { public static void main(String[] args) { int n =39; int sum=fib(n); System.out.println(sum); } public static int fib(int n){ if (n==2) return 1; if (n==3) return 2; if (n==4) return 2; if (n==5) return 4; return fib(n-2)+2*fib(n-3)+fib(n-4); } }