package com.guge.test.recursion;
/**
* Created by guugangzhu on 2017/5/23.
*/
public class StackTriangle {
}
class Params{
public int n;
public int returnAddress;
public Params(int nn,int ra){
n=nn;
returnAddress=ra;
}
}
class StackX{
private int maxSize;
private Params[] stackArray;
private int top;
public StackX(int max){
maxSize=max;
stackArray=new Params[maxSize];
top=-1;
}
public void push(Params p){
stackArray[++top]=p;
}
public Params pop(){
return stackArray[top--];
}
public Params peek(){
return stackArray[top];
}
}
class StackTriangleApp{
static int theNumber;
static int theAnswer;
static StackX theStack;
static int codePart;
static Params theseParams;
public static void main(String[] args) {
theNumber=100;
recTriangle();
System.out.println(theAnswer);
}
public static void recTriangle(){
theStack=new StackX(10000);
codePart=1;
while (!step())
;
}
public static boolean step(){
switch (codePart){
case 1:
theseParams=new Params(theNumber,6);
theStack.push(theseParams);
codePart=2;
break;
case 2:
theseParams=theStack.peek();
if(theseParams.n==1){
theAnswer=1;
codePart=5;
}else {
codePart=3;
}
break;
case 3:
Params newParams=new Params(theseParams.n-1,4);
theStack.push(newParams);
codePart=2;
break;
case 4:
theseParams=theStack.peek();
theAnswer=theAnswer+theseParams.n;
codePart=5;
break;
case 5:
theseParams=theStack.peek();
codePart=theseParams.returnAddress;
theStack.pop();
break;
case 6:
return true;
}
return false;
}
}
以栈的形式展示递归流程package com.guge.test.recursion;/** * Created by guugangzhu on 2017/5/23. */public class StackTriangle {}class Params{ public int n; public int returnA