2013-03-28 116 views
0

目标:单独创建Hosoya三角形的递归表示形式。java中的Hosoya三角形

您的任务:着名数学家Haru Hosoya描述了一个三角形(见下文),这是一个基于斐波那契数字的三角形数字排列。从用户获取高度并使用数组来存储每行上的值。使用递归方法打印适当数量的Hosoya三角形。不要认为输入会很好。您还应该执行try ... catch块以捕获错误的输入。

这里是我的代码至今:

public class HosoyaTri { 

    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 
     boolean continueLoop = true; 
     int num = s.nextInt(); 
     do { 
      try { 
       System.out.println("How many levels?"); 

       System.out.println(num + " levels"); 
       continueLoop = false; 
      } catch (InputMismatchException im) { 
       System.err.println("I said INTEGER, try again"); 
       s.nextLine(); 
      } catch (Exception e) { 
       System.err.println("What did you do?"); 
      } 
     } while (continueLoop); 
     int triangle[][] = new int[num][num]; 
     for (int i = 0; i < num; i++) { 
      for (int j = 0; j < num; j++) { 
       triangle[i][j] = 0; 
      } 
     } 
     for (int i = 0; i < num; i++) { 
      triangle[i][0] = 1; 
     } 
     for (int i = 1; i < num; i++) { 
      for (int j = 1; j < num; j++) { 
       triangle[i][j] = triangle[i - 1][j - 1] * triangle[i - 1][j]; 
      } 
     } 
     for (int i = 0; i < num; i++) { 
      for (int j = 0; j <= i; j++) { 
       System.out.print(triangle[i][j] + " "); 
      } 
      System.out.println(); 
     } 
    } 

} 
+3

你有什么具体问题?你的程序崩溃了吗?产生不正确的输出?还有别的吗? –

+0

我可以读取用户的关卡数量,但不能实际创建hosoya三角形。如果我尝试运行这个程序,但没有任何反应,但没有错误 – user2220682

+0

看起来像作业... – nalply

回答

1

的一个问题是,你正在阅读的级别数一次,输入回路之前。然后你提示一个级别,然后打印num而不给用户任何提供输入的机会!你应该解决这个问题。您还应该对num <= 0进行测试。

至于如何使用递归推移,在Hosoya's triangle条目可以递归定义:

ħ 0,0 = H 1,0 = H 1,1 = H 2,1 = 1
ħñ,J = H N-1,J + H N-2,J或 ħÑ,J = H N-1,J-1 + H N-2,J-2

另一个(当量)的定义是:

ħ N,我 = F i + 1的×F N-1 + 1

其中F Ñ是n Fibonacci number,递归地定义为:

˚F = 0
˚F = 1
˚FÑ = F n-1个 + F n-2(n > 1)

我建议使用这些定义之一在您的类中编写一个(递归)静态方法,以计算三角形中一个条目的正确值(给出nj作为参数)。然后你可以消除triangle变量和所有初始化它的代码。简单地运行你的输出循环,并用你现在访问triangle的特定元素的递归方法替代一个调用。(如果出于某种原因需要明确地构建三角形,只需通过调用递归方法来初始化每个元素即可:另外:不需要将triangle的元素初始化为0; Java在分配矩阵时自动执行此操作。)

+0

我会努力工作并回复你,谢谢你的帮助 – user2220682