博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java递归算法——三角数字(消除递归)
阅读量:6759 次
发布时间:2019-06-26

本文共 4423 字,大约阅读时间需要 14 分钟。

 

import java.io.*;                 // for I/O//类名:Params//属性://方法:class Params     //这个类的对象被压入栈中   {   public int n;							//用来存放键盘输入的数字   public int returnAddress;	//返回的地址   public Params(int nn, int ra)      {      n=nn;      returnAddress=ra;      }   }  // end class Params//类名:StackX//属性://方法:class StackX   {   private int maxSize;         // size of StackX array   private Params[] stackArray;   private int top;             // top of stack//--------------------------------------------------------------   public StackX(int s)         // constructor      {      maxSize = s;              // set array size      stackArray = new Params[maxSize];  // create array      top = -1;                 // no items yet      }//--------------------------------------------------------------   public void push(Params p)   // put item on top of stack      {      stackArray[++top] = p;    // increment top, insert item      }//--------------------------------------------------------------   public Params pop()          // take item from top of stack      {      return stackArray[top--]; // access item, decrement top      }//--------------------------------------------------------------   public Params peek()         // peek at top of stack      {      return stackArray[top];      }//--------------------------------------------------------------   }  // end class StackX//类名:stackTriangle//属性://方法:class stackTriangle   {   static int theNumber;		//用于接收输入的int   static int theAnswer;   static StackX theStack;   static int codePart;				//用于switch选择   static Params theseParams;   public static void main(String[] args) throws IOException      {      System.out.print("Enter a number: ");      theNumber = getInt();		//接收键盘输入的int      recTriangle();      System.out.println("Triangle="+theAnswer);      }  // end main()   public static void recTriangle()      {      theStack = new StackX(10000);      codePart = 1;      while( step() == false)  // call step() until it's true         ;                     // null statement      }//-------------------------------------------------------------   public static boolean step()      {      switch(codePart)         {         case 1:                              // initial call        	 System.out.println("进入1");            theseParams = new Params(theNumber, 6);	            theStack.push(theseParams);            codePart = 2;            break;                     case 2:                              // method entry        	 System.out.println("进入2");            theseParams = theStack.peek();	//对输入的数字一直减1,直到等于1,如果大于1就跳到3中,压入栈中            if(theseParams.n == 1)            		// n是键盘输入的数字,如果是1,结果是1,codePart跳到5               {               theAnswer = 1;               codePart = 5;   // exit               }            else														//如果大于1,就跳到3               codePart = 3;   // recursive call            break;                     case 3:                                      	 System.out.println("进入3");            Params newParams = new Params(theseParams.n - 1, 4);            theStack.push(newParams);			//把输入的数字减去1,并压入栈中            codePart = 2;  										//回到2中判断数组减去1后,是否等于1            break;                     case 4:                              // calculation        	 System.out.println("进入4");            theseParams = theStack.peek();			//取得2            theAnswer = theAnswer + theseParams.n;	//1+2            codePart = 5;            break;                     case 5:                              // method exit        	 System.out.println("进入5");            theseParams = theStack.peek();            codePart = theseParams.returnAddress; //在2和3中交替跳转后,结束时跳到5,此时栈中codePart除了栈底是6,其他都是4            theStack.pop();				//在取得了下次跳转的位置后,出栈,第一次出栈的是(1,4)            break;                     case 6:                              // return point        	 System.out.println("进入6");            return true;         }  // end switch      return false;      }  // end triangle//-------------------------------------------------------------   public static String getString() throws IOException      {      InputStreamReader isr = new InputStreamReader(System.in);      BufferedReader br = new BufferedReader(isr);      String s = br.readLine();      return s;      }//-------------------------------------------------------------   public static int getInt() throws IOException      {      String s = getString();      return Integer.parseInt(s);      }   }

 

转载地址:http://poweo.baihongyu.com/

你可能感兴趣的文章
你知道怎么实现MBR和GPT之间的转换么?
查看>>
操作系统
查看>>
vuejs学习之 项目打包之后的首屏加载优化
查看>>
三十、小程序解析HTML(对富文本返回数据的处理)
查看>>
利用YUM搭建DNS
查看>>
好详细啊saltsatck超全配置
查看>>
安装LAMP环境遇到Sorry, I cannot run apxs
查看>>
centos7双网卡bond失败
查看>>
JNI AES文件及字符串加解密
查看>>
APUE读书笔记-16网络通信-01简介
查看>>
企业网络安全必需措施 保证高效工作环境
查看>>
apache站点稍大文件不完整原因及解决
查看>>
python的reduce函数
查看>>
细读shell-6
查看>>
ubuntu11.10安装php mysql wordpress
查看>>
一、2 基于wsgiref定义自己的web框架
查看>>
Ubuntu Server14.04 32位安装odoo8.0简单方法
查看>>
jQuery-easyui下的多表关联的增删改操作
查看>>
C库函数学习笔记之strstr
查看>>
我的友情链接
查看>>