Java 递归、尾递归、非递归、栈 处理 三角数问题
来源:互联网 发布:matlab编程实验答案 编辑:程序博客网 时间:2024/06/05 18:47
import java.io.BufferedReader;import java.io.InputStreamReader;//1,3,6,10,15...n 三角数/* * #1 * ##1+2 * ###1+2+3 * ####1+2+3+4 * #####1+2+3+4+5 * ...第1层为1, 第n层等于 n + (f(n-1)) */public class TriangleNumber {static int triangle(int n) {if (n < 1) return 0;if (n == 1) return 1;return n + triangle(n - 1); //递归到里层计算,从最底层递归向上返回结果并与n计算和}//如果一个函数的递归形式的调用出现在函数的末尾,则称为 尾递归函数static int triangle(int n, int last) {//last初始传0 尾递归if (n < 1) return 0;if (n == 1) return 1 + last;return triangle(n - 1, n + last); //递归到里层,最底层直接算好最终结果并返回,}//非递归static int triangle2(int n) {int sum = 0;for (int i = 1; i <= n; i++) {sum += i;}return sum;}static int str2Int(String num) {return Integer.valueOf(num);}//栈保存处理步骤. 这里就是保存 计算过程的 每一步骤 的值private static class MyStack {int maxSize;int[] stackAry;int top; //栈顶的索引 MyStack(int max) { this.maxSize = max; this.stackAry = new int[maxSize]; top = -1;}void push(int n) {stackAry[++top] = n;}int pop() {return stackAry[top--];}int peek() {return stackAry[top];}boolean isEmpty() {return top == -1;}}//使用栈 实现static int triangle3(int n) {MyStack stack = new MyStack(n);int result = 0;while (n > 0) {stack.push(n);n--;}while (!stack.isEmpty()) {int temp = stack.pop();result += temp;}return result;}public static void main(String[] args) throws Exception {System.out.println("-----程序开始,要计算第多少位的三角数值,请输入位数数字 (输入exit结束程序)-----");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String line = br.readLine();while (!line.equals("exit")) {int n = str2Int(line);System.out.println("递归:" + triangle(n));System.out.println("尾递归:" + triangle(n, 0));System.out.println("非递归:" + triangle2(n));System.out.println("栈实现:" + triangle3(n));System.out.println();System.out.println("-----程序开始,要计算第多少位的三角数值,请输入位数数字 (输入exit结束程序)-----");line = br.readLine();}System.out.println("-----程序退出-----");Runtime.getRuntime().exit(0);}}
test
-----程序开始,要计算第多少位的三角数值,请输入位数数字 (输入exit结束程序)-----10递归:55尾递归:55非递归:55栈实现:55-----程序开始,要计算第多少位的三角数值,请输入位数数字 (输入exit结束程序)-----100递归:5050尾递归:5050非递归:5050栈实现:5050-----程序开始,要计算第多少位的三角数值,请输入位数数字 (输入exit结束程序)-----exit-----程序退出-----
0 0
- Java 递归、尾递归、非递归、栈 处理 三角数问题
- Java 递归、尾递归、非递归 处理阶乘问题
- ch6 递归 --三角数
- 巴基卡三角非递归与递归算法
- 尾递归, dfs递归问题非递归化
- 问题八十八:Fibonacci数非递归解
- 【算法】 组合数问题非递归解法
- java--批量处理图片 非递归版
- 约瑟夫问题非递归
- 差三角 Java 递归 遍历
- 杨辉三角的递归和非递归实现
- 八皇后问题 回溯 非递归 java
- 迷宫问题 非递归(java版)
- 递归与非递归解决组合问题
- 兔子、母牛繁殖问题(递归、非递归)
- 整数划分问题(递归&非递归)
- 递归和非递归实现汉诺塔问题
- 迷宫问题递归与非递归求解
- MongoDB的文档增删改
- QWT编译、配置、使用(VS2010 + Qt5.1.0)
- DG基础知识
- VMware中ubuntu忘记密码的解决办法
- Java基础知识——JNI入门介绍
- Java 递归、尾递归、非递归、栈 处理 三角数问题
- Android 系统资源(字体,声音,视频)的简介
- 看我是如何通过路由器嗅探获取隔壁妹子的信息
- 黑马程序员——java基础概述及java环境搭载
- 将View设置为Opaque
- hdu3033 I love sneakers!
- 织梦调用首页调用文章标题、图片、简介、详情
- SAT阅读:跟专家学习SAT阅读长难句
- cocos2d-x 3.3 之卡牌设计 NO.5 设置界面(透明层和屏蔽下层触控)