就是递归函数的简单应用
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);
}
}
你们老师没给你讲清楚吗?一楼的这个错误回答是个坑(死循环会内存溢出而且递归你可能还没讲),所以哪怕可以得到结果也不适合你,你可以直接忽略。你更需要的是程序员的思考方式。
首先你这个 表达式可以调整成: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];
}