在Java中编码递归关系

时间:2017-08-20 08:50:18

标签: java recursion

我正在编写一个计算递归数学问题的代码,名为foo。

条件应该是,
如果n < 4foo(n) = n
如果n >= 4foo(n) = n + foo(n - 1) + 2*foo(n-2)

public class foo {

    public static int foo(n) {
        if(n < 4) {
            return n;
        } else if(n >= 4) {

        }
    }


    public static void main(String[] args) {

    }   
}

我被困在这里...... 我的最终目的是陈述foo(1),foo(2),foo(3),foo(4),foo(5),foo(6),foo(7)的值。

另外,我允许将main方法放在那个foo类中吗?

4 个答案:

答案 0 :(得分:2)

您正在寻找以下功能:

public static int bar(int n){
    if(n < 4){
        return n;
    } 
    return n + bar(n - 1) + 2*bar(n-2);
}

首先,如果您只想要一个直接从main调用的函数,它必须是static,因为您不允许从静态上下文中调用非静态方法

static函数(方法)在类上调用,而不是在对象上调用。因此,无需创建对象 - 只需执行Foo.bar(anyInt)

然后,您需要检查n是否小于4 - 如果是,return n

不需要else子句,因为如果我们返回内部,我们将不再执行该函数的代码,因为return也意味着exit this function now。< / p>

然后,请遵循Java命名策略,因此请使用大写字母(Foo而不是foo)启动类名。 foo是字段,变量或方法的完美名称,但不适用于类。

代码最终应该是:

public class Foo {

    public static int bar(int n){
        if(n < 4){
            return n;
        } 
        return n + bar(n - 1) + 2*bar(n-2);
    }

    public static void main(String[] args) {

        for (int i = 1; i < 8; i++) {
            System.out.println("bar(" + i + ") is " + Foo.bar(i));
        }
    }   
}

输出将是:

>bar(1) is 1
>bar(2) is 2
>bar(3) is 3
>bar(4) is 11
>bar(5) is 22
>bar(6) is 50
>bar(7) is 101

答案 1 :(得分:1)

以下方法也适用。

public static int foo(int n) {
      return n < 4 ? n : (n + foo(n-1) + (2*foo(n-2)));
}

答案 2 :(得分:0)

public static void main(String[] main) {
    // a loop runs to get value of foo(1)...foo(7)
    for (int i = 1; i <= 7; i++) {
         // the returned value is printed over here
        System.out.println(foo(i));
    }
}

public static int foo(int n) {
    // this goes according to your formulae
    if (n < 4) {
        return n;
    }
    else {
        // by using recursion we are evaluating the value
        // here foo(n-1) and foo(n-2) provides the required
        // values which is being added to 'n' and being returned 
        return (n + foo(n - 1) + 2 * foo(n - 2));
    }
}

答案 3 :(得分:-1)

这样做,它应该有效:

public class foo {

    public static int mfoo(n)
    {
        if(n < 4) return n;            //no need for else if
        else return n + foo(n - 1) + 2*foo(n-2);
    }


    public static void main(String[] args)
    {
        int n = 10; //number to calculate for
        System.out.println(foo(n));

    }   
}

如果要直接执行主方法,可以将主方法保留在foo类中。如果你想从另一个类中执行它,在该类中创建main()函数,并像这样调用它:

public static void main(String[] args)throws IOException{
    foo newFoo =  new foo();
    System.out.println(newFoo.mfoo(10));

注意:不要将您的方法命名为类名(foo)。 构造函数可以执行此操作,这是 NOT 构造函数。