Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 如何处理递归函数的元素?_Function_Recursion - Fatal编程技术网

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]);
    }
}