Java 2.3题代码怎么写呢什么规律

img

就是递归函数的简单应用

package com.csdn;

public class Solution {

    public static void main(String[] args) {
        System.out.println(func2(10));
        System.out.println(func3(10));

    }

    public static int func2(int n) {
        if (n == 0)
            return 1;
        if (n == 1)
            return 4;
        return 2 * func2(n - 1) + func2(n - 2);
    }

    public static int func3(int n) {
        if (n == 20)
            return 1;
        if (n == 21)
            return 4;
        return func3(n + 2) - 2 * func3(n + 1);
    }

}

img

你们老师没给你讲清楚吗?一楼的这个错误回答是个坑(死循环会内存溢出而且递归你可能还没讲),所以哪怕可以得到结果也不适合你,你可以直接忽略。你更需要的是程序员的思考方式。
首先你这个 表达式可以调整成:f(0)=1 ; f(1) = 4 ; f(n+2) = 2f(n+1) + f(n) 可变为: f(n) = f(n+2) - 2f(n+1)
你可以先不管什么循环递归,多写几个if else 判断 如果是0 , 1, 2, 3 当你判断次数多了你会总结出简化的代码


public int getValue(int n){
        if(n == 0){
            return 1;
        }
        if(n==1){
            return 4;
        }
        int[] dp = new int[n+1];
        dp[0]=1;
        dp[1]=4;
        for (int i=0;i<n-1;i++){
            dp[i+2] = 2*dp[i+1]+dp[i];
            System.out.println(i+2+"\t"+dp[i+2]);
        }
       return dp[n];
    }