(Java)递归函数:使用n-1和n + 1

时间:2015-12-05 04:00:56

标签: java function recursion

我最近得到了一个项目如下:

递归关系:     x(n)= x(n + 1) - 2x(n-1)其中x(0)= 1且x(2)= 3 编写一个程序,用户输入一个数字,n和x的第n个值,如上所示输出。

到目前为止,我已经制作了这个方法(我很新,并且[到目前为止]递归真的很糟糕)

>>> pd.get_dummies(df.column1).groupby(level=0).max()
   value1  value2  value3
A       1       1       0
B       0       0       1

和一个简单的主方法,提示用户输入n,然后打印上述方法的结果:

>>> d2 = df.reset_index()
>>> d2["dummy"] = 1
>>> d2.pivot_table("dummy", "index", "column1")
column1  value1  value2  value3
index                          
A             1       1     NaN
B           NaN     NaN       1
>>> d2.pivot_table("dummy", "index", "column1", fill_value=0)
column1  value1  value2  value3
index                          
A             1       1       0
B             0       0       1

从作业中,我计算出x(1)= 1. [给我x(0)= 1和x(2)= 3]:

public class x 
{
    static int x(int n)
    {
        if(n <= 1)
        {
            return 1;
        }
        if(n == 2)
        {
            return 3;
        }
        else
        {
            return x(n+1) - 2*(x(n-1));
        }
    }

将我带到上面静态方法x中显示的基本情况

public static void main(String[]args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter a number: ");
        int n = scanner.nextInt();
        System.out.println(x(n));
    }

当我运行我所拥有的程序时,程序会给我错误:

x(n) = x(n+1) - 2(x(n-1))
x(1) = x(2) - 2(x(0))
x(1) = 3 - 2(1)
x(1) = 3 - 2
x(1) = 1

第21行是x方法的else子句中的return语句:

if(n <= 1) // because 0 and 1 each return 1
{
return 1;
}
if(n == 2) // simply because 2 returns 3
{
return 3;
}

我不知道我可以改变什么来修复它。我已经尝试将其重新设置为x(n + 1)-x(n-1)-x(n-1),但它继续给我相同的错误。我不知道它是否是无效的基本情况,因此不允许函数正确地运行它,或者只是我所做的return语句是错误的。 我也尝试写出来,就像x(5)调用x(4)调用x(3)一样,正如我的笔记所示,但是我遇到了关于在同一个函数语句中有n + 1和n-1的问题所以我想我只是走错路。 非常感谢任何关于此的指导!

2 个答案:

答案 0 :(得分:2)

问题是因为它永远不会结束循环.... x(n)= x(n + 1) - 2x(n-1)

你正在递增n,即, 对

x(0)= 1

x(1)= x(2) - 2 x(0)

x(3)= x(4) - 2 x(2)....

它一直在继续,因为x(n + 1)没有上限......

请检查您是否错过了递归将终止的边界条件。

答案 1 :(得分:1)

递归关系定义为前述术语的函数。 所以你必须重新定义你的递归关系,

x(n) = x(n+1) - 2x(n-1)

x(n+1) = x(n) + 2x(n-1)

x(n) = x(n - 1) + 2x(n-2)

使用上面的等式来实现具有基本情况x(0) = x(1) = 1, x(2) = 3的算法。