Function 如何处理递归函数的元素?
以递归函数为例,例如:Function 如何处理递归函数的元素?,function,recursion,Function,Recursion,以递归函数为例,例如: public static long rekurs(long n) { if (n == 0) { return 1; } else if (n == 1) { return 1; } else { return rekurs(n - 1)*(rekurs(n - 2)+4; } } 当n=20时,函数必须首先找到n=2、…、19的所有值S(n)。 当我让n从20变为21时,它再次做同样的事
public static long rekurs(long n) {
if (n == 0) {
return 1;
} else if (n == 1) {
return 1;
} else {
return rekurs(n - 1)*(rekurs(n - 2)+4;
}
}
当n=20时,函数必须首先找到n=2、…、19的所有值S(n)。当我让n从20变为21时,它再次做同样的事情(加上发现S(20)) 现在我想创建一个数组,在数组中填入n=2,…,19的查找值S(n),这样n=21的函数就不必再做同样的事情了,但是如何获取这些元素呢
这就是我想出的解决方案,它和课堂上的例子有点不同。 帮助我的关键词是“动态规划”
导入java.util.array;
公共类Bsp13{
公共静态最终整数N=0;
公共静态最终int Ende=20;
公共静态长[]schroe=新长[N+Ende+1];
公共静态void main(字符串[]args){
schroe[0]=1;
schroe[1]=1;
对于(int n=2;n来说,您试图做的是动态规划。基本上,它是簿记,以避免多次计算亚分辨率。
因此,基本上,您需要将n
值映射到解决方案值
当需要计算n
的值时,首先检查解决方案是否在字典中,如果是,则返回结果。如果不是,则计算结果并将其放入字典中
考虑如何初始化此字典,以及如何将其传递给递归函数调用
这是一个关于动态规划的讲座视频,其中解释了使用动态规划计算Fibonnaci数,这与您尝试做的非常相似:
import java.util.Arrays;
public class Bsp13 {
public static final int N = 0;
public static final int Ende = 20;
public static long[] schroe = new long[N + Ende + 1];
public static void main(String[] args) {
schroe[0] = 1;
schroe[1] = 1;
for (int n = 2; n <= Ende + N; n++) {
schroe[n] = ((6 * n - 3) * (schroe[n-1]) - (n - 2) * (schroe[n-2])) / (n + 1);
}
System.out.println(schroe[N]);
System.out.println(Arrays.toString(schroe));
System.out.println(schroe[N+Ende]);
}
}