用while循环和累加器替换递归

时间:2013-11-11 15:47:04

标签: java swing recursion

我想计算高度并设置可能包含其他JSplitPanes和其他组件的JSplitPane的resizeWeight。这个概念现在看起来如下(警告:片段,不是一个功能完备的代码片段;我只需要使用累加器重写带有while循环的递归调用的指南,而不是一个功能完整的解决方案代码。)

splitPane.setResizeWeight(calculateComponentHeight(splitPane.getTopComponent()) / calculateNewSplitPaneHeight(splitPane));
...
private double calculateNewSplitPaneHeight(JSplitPane sp) {
  return calculateComponentHeight(sp.getTopComponent()) + calculateComponentHeight(sp.getBottomComponent());
}

private double calculateComponentHeight(Component c) {
  if (c instanceof JSplitPane) {
    return calculateNewSplitPaneHeight((JSplitPane) c);
  }
  return (double) c.getHeight();
}

由于我可能不知道拆分窗格的嵌入程度,解决此类递归的实用方法是什么?

是的,我知道,splitPane.getPreferredSize().heightsplitPane.getTopComponent().getPreferredSize().height在没有任何递归调用的情况下向我提供了我需要的答案。这个问题仅仅是在一个人的大脑上进行递归和循环。

1 个答案:

答案 0 :(得分:1)

您可以使用堆栈模拟递归:How can you emulate recursion with a stack?

我曾尝试模拟一个简单的Fibonacci式递归:

f(n) = f(n-1) + f(n-2) + array[n]

结果为placed on a GitHub,并根据链接答案中的说明编写。我应该承认,这比我想象的要复杂得多。