【问题标题】:why am i having error in the return F(n - 1,t) + F(n,t-1) line ?为什么我在返回 F(n - 1,t) + F(n,t-1) 行中有错误?
【发布时间】:2015-04-14 03:41:37
【问题描述】:

问题:

数学证明,以下 2D 递归关系支配这些值:

                      F(n,t) = F(n-1,t) + F(n,t-1)

现在,回答以下问题:

(b) 使用递归方法,实现上述关系。

(c) 使用 (5,5)、(10, 10) 和 (14,14) 测试您的方法

//主要方法

public static void main(String[] args) {
    // TODO code application logic here

    TwoDimension a = new TwoDimension();
    a.F(5, 5);
    a.F(10, 10);
    a.F(14, 14);
}

//类

public static class TwoDimension {

    public TwoDimension() {

    }

    public long F(int n, int t) {

            if (t == 1) {
                return 1;
            } else {
                return F(n - 1, t) + F(n, t - 1);
            }


    }
}

这是输出

Exception in thread "main" java.lang.StackOverflowError
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)
at project2.Project2$TwoDimension.F(Project2.java:37)

请帮助meeeee,如何修复返回方法?

【问题讨论】:

  • 您有n 的基本案例吗?这可能就是让你崩溃的原因。

标签: java arrays recursion


【解决方案1】:

在您的代码中

F(n, t - 1);

将评估 t 的基本条件。但是

 F(n - 1, t)

你传递的值与 t 相同。所以它永远不会改变,也永远不会达到 t 的基本条件。 除此之外,您也没有任何 n 的基值。

【讨论】:

    【解决方案2】:

    在你的功能中:

    public long F(int n, int t) {

            if (t == 1) {
                return 1;
            } else {
                return F(n - 1, t) + F(n, t - 1);
            }
    
    
    }
    

    对于这种情况,F(n - 1, t)t 将始终保持不变,因此永远不会到达 t==1,递归也不会结束。

    您需要为n 设置一个条件,当您这样做时,您可能还想检查负数:)

    【讨论】:

      猜你喜欢
      • 2015-08-13
      • 2021-10-06
      • 2015-10-08
      • 2021-08-30
      • 1970-01-01
      • 2012-03-21
      • 2021-04-24
      • 1970-01-01
      • 2016-03-12
      相关资源
      最近更新 更多