计算递归次数

1.递归计算次数方法

import java.io.IOException;public class Digui extends Thread {public static void main(String[] args) {//创建一个本身方法。Digui instance = new Digui();byte[] b = new byte[32];//定义一个死循环。while (true) {try {System.out.println("请输入正整数,获取其阶乘,输入over结束");System.in.read(b);//控制台输入数据String res = new String(b).trim();//将控制台输入的数据转为String并去除两端空格if (res.equals("over")) {System.out.println("程序结束");break;}int i = Integer.parseInt(res.trim());//将控制台输入的转换为int类型if (i <= 0) {continue;}//调用factorial方法给递归次数赋初始值0。并开始调用递归方法System.out.println(i + "!=" + instance.factorial(i));//获取递归次数。System.out.println("递归了 " + instance.getCount() + " 次");} catch (IOException e) {e.printStackTrace();} catch (NumberFormatException ne) {System.out.println("请输入正整数");}}}// 存递归次数的变量private int count = 0;//将递归次数返回给调用者public int getCount() {return count;}public long factorial(int i) {// 将递归次数清零,若要统计所有的,则将count注释即可count = 0;//调用递归方法,并将递归次数结果返回。return this.getResult(i);}//递归方法。计算递归次数。public long getResult(int i) {count++;return i == 1 ? i : i * getResult(i - 1);}}

2.计算递归次数案例。

需求: 我使用一款软件,我可以将这个软件推荐给别人。别人可以再推荐给其他人,以此类推。我推荐的人属于我直接推荐的人,我推荐的人再推荐的人以此类推之后的所有推荐的人都算是我的间接推荐的人。计算我的直接和间接推荐的总人数。

2.1 创建一个可运行的web项目(步骤省略)

2.2 创建一个用户实体类

package com.sm.model;public class User {private Integer userId;//用户idprivate Integer recommendUserId;//用户的推荐人的id//即recommendUserId推荐了userIdprivate String phone;private String password;private Double balance;private String headLink;private Integer depositDay;private String recommendLink;private String recommendQrCodeUrl;public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public Integer getRecommendUserId() {return recommendUserId;}public void setRecommendUserId(Integer recommendUserId) {this.recommendUserId = recommendUserId;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone == null ? null : phone.trim();}public String getPassword() {return password;}public void setPassword(String password) {this.password = password == null ? null : password.trim();}public Double getBalance() {return balance;}public void setBalance(Double balance) {this.balance = balance;}public String getHeadLink() {return headLink;}public void setHeadLink(String headLink) {this.headLink = headLink == null ? null : headLink.trim();}public Integer getDepositDay() {return depositDay;}public void setDepositDay(Integer depositDay) {this.depositDay = depositDay;}public String getRecommendLink() {return recommendLink;}public void setRecommendLink(String recommendLink) {this.recommendLink = recommendLink == null ? null : recommendLink.trim();}public String getRecommendQrCodeUrl() {return recommendQrCodeUrl;}public void setRecommendQrCodeUrl(String recommendQrCodeUrl) {this.recommendQrCodeUrl = recommendQrCodeUrl == null ? null : recommendQrCodeUrl.trim();}
}

2.3 编写DAO层查询方法。

import java.util.List;
import com.sm.model.User;public interface UserMapper {//通过把用户id作为推荐人查询这个用户推荐的所有的人。List<User> selectUserByRecommendUserId(Integer recommendUserId);
}

2.4 编写Mapper.xml层

<select id="selectUserByRecommendUserId" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from userwhere recommend_user_id = #{recommendUserId,jdbcType=INTEGER}</select>

2.5 编写Service层

import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import com.sm.dao.UserMapper;
import com.sm.model.User;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public int selectUserByRecommendUserId(Integer recommendUserId){//调用factorial方法。传递参数this.factorial(recommendUserId);System.out.println("递归了 " + this.getSum() + " 次");//调用getSum方法单独获取返回值。return this.getSum();}private int sum = 0;//将sum值返回给调用者。public int getSum() {return sum;}public long factorial(int recommendUserId) {// 将递归次数清零,若要统计所有的,则将count注释即可sum = 0;return this.getResult(recommendUserId);}//递归方法。public long getResult(int recommendUserId) {List<User> users = userMapper.selectUserByRecommendUserId(recommendUserId);if(users.size() > 0) {for (User user : users) {int userId = user.getUserId();sum += 1;getResult(userId);}}return sum;}
}

2.6 编写Controller层

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.sm.service.UserService;
import com.sm.util.Msg;@Controller
public class UserController {@Autowiredprivate UserService userService;/***    查询推荐的总人数。* @param recommendUserId  推荐人的userId* @return    */@RequestMapping("/numberPer")@ResponseBodypublic Msg numberPer(Integer recommendUserId) {//调用service层的查询人数方法。并返回结果int sum = userService.selectUserByRecommendUserId(recommendUserId);return Msg.success().add("推荐总人数", sum);}
}

2.7 用到的通用的返回值得工具类。

import java.util.HashMap;
import java.util.Map;/*** 通用的返回的类*/
public class Msg {//状态码   100-成功    200-失败private int code;//提示信息private String msg;//用户要返回给浏览器的数据private Map<String, Object> extend = new HashMap<String, Object>();private Object object;public static Msg success(){Msg result = new Msg();result.setCode(100);result.setMsg("处理成功!");return result;}public static Msg success(Object object){Msg result = new Msg();result.setCode(100);result.setMsg("处理成功!");result.setObject(object);return result;}public static Msg fail(){Msg result = new Msg();result.setCode(200);result.setMsg("处理失败!");return result;}//返回方法add()的定义public Msg add(String key,Object value){this.getExtend().put(key, value);return this;}//返回方法add()的定义public Msg addObject(Object obj){this.setObject(obj);return this;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Map<String, Object> getExtend() {return extend;}public void setExtend(Map<String, Object> extend) {this.extend = extend;}public Object getObject() {return object;}public void setObject(Object object) {this.object = object;}
}

2.8 数据库

/*Navicat Premium Data TransferSource Server         : MySql5.5Source Server Type    : MySQLSource Server Version : 50562Source Host           : localhost:3306Source Schema         : cxTarget Server Type    : MySQLTarget Server Version : 50562File Encoding         : 65001Date: 14/10/2019 14:43:14
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`user_id` int(10) NOT NULL AUTO_INCREMENT COMMENT '用户id',`recommend_user_id` int(10) NULL DEFAULT NULL COMMENT '我的推荐人id',`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',`balance` double(30, 2) NULL DEFAULT 0.00 COMMENT '余额',`head_link` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像链接',`deposit_day` int(10) NULL DEFAULT NULL COMMENT '已存入天数',`recommend_link` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '推广链接',`recommend_qr_code_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '推广图片路径',`crowd_funding_money` double(30, 2) NULL DEFAULT NULL COMMENT '众筹金额',PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, NULL, '18912480392', '12345678', 100000002.00, '头像', 3, '推荐连接', '二维码', 25.00);
INSERT INTO `user` VALUES (2, 1, '12345678998', '65498', 65498.00, '玩儿', 2, '玩儿', '玩儿', 23.00);
INSERT INTO `user` VALUES (3, 5, '32165498654', '32165', 65498.00, '二阿哥', 12, '委屈', '为期二天', 65.00);
INSERT INTO `user` VALUES (4, 1, '98746549876', '34654', 987618.00, '东方红', 6, '图', '无一人头', 76.00);
INSERT INTO `user` VALUES (5, 2, '64546587654', '16465', 65498.00, '法规及', 9, '而已', '多个', 88.00);
INSERT INTO `user` VALUES (6, 3, '65498465184', '94654', 98494.00, '等会是', 5, '矮冬瓜', '敢', 23.00);
INSERT INTO `user` VALUES (7, 3, '98798466548', '98716', 235.00, '到公司', 3, '多个', '电饭锅', 56.00);SET FOREIGN_KEY_CHECKS = 1;

递归方法。计算递归次数相关推荐

  1. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  2. 实验三:分别用for、while和do-while循环语句以及递归方法计算n!,并输出算式...

    一.用for循环计算n! package for_package; import java.util.*;//导入含有输入类的包 public class for_class { /** * @par ...

  3. 反转字符串/列表、改变递归次数限制、else用法...Python 冷知识(四)

    本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第四篇.前三篇传送门在此,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) 谈谈 Pyth ...

  4. python concat函数 多张表_教你用python递归函数求n的阶乘,优缺点及递归次数设置方式

    本文内容介绍了python递归函数求n的阶乘,优缺点及递归次数设置方式,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧! 递归函数两大特点: 1.能够调用函数自身 2.至少有一个出口( ...

  5. 用递归方法计算斐波那契数列(Recursion Fibonacci Sequence Python)

    先科普一下什么叫斐波那契数列,以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因意大利数学家列昂纳多·斐波那契(Leonardoda Fibonacci ...

  6. java统计每个单词单词出现的次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...

    本文实例讲述了Java统计英文句子中出现次数最多的单词并计算出现次数的方法.分享给大家供大家参考,具体如下: import java.util.*; /** * 统计出现次数最多的单词和它出现的次数 ...

  7. java 单词出现次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...

    搜索热词 本文实例讲述了Java统计英文句子中出现次数最多的单词并计算出现次数的方法.分享给大家供大家参考,具体如下: import java.util.*; /** * 统计出现次数最多的单词和它出 ...

  8. 采用递归方法计算x的n次方。

    采用递归方法计算x的n次方. **输入格式要求:"%d%d" 提示信息:"x=? n=?" **输出格式要求:"%d**%d=%d\n" 程 ...

  9. 用汇编语言递归方法计算8以内的阶乘

    标题用汇编语言递归方法计算8以内的阶乘斜体样式 方法一 .MODEL SMALL .DATA STRING1 DB 'PLEASE INTPUT THE NMBER(0~8):$'; 请输入n STR ...

最新文章

  1. Sharding-Jdbc 实现读写分离 + 分库分表,写得太好了!
  2. Shell编程中Shift的用法
  3. 《拥抱变化——社交网络时代的企业转型之道》一构筑社会信任
  4. 新建arcgis api for android 项目失败
  5. 正则学习(2)--- 简单匹配原理
  6. (仿头条APP项目)2.主界面按钮切换Fragment页面
  7. iOS 仿支付宝刮刮乐效果
  8. python中pygame输入换行文字,Pygame:写多行
  9. Flutter Curves 动画曲线合辑
  10. storm中的乐器 wolven_Wolven Storm 风雪狼踪
  11. Qunee For Html5 开发清新、高效的拓扑图组件
  12. python plt 画图
  13. 小米笔记本Air 13.3 指纹版安装黑苹果 macOS High Sierra 10.13 教程
  14. Oracle SOA平台1——概述
  15. 天地图和谷歌地图静态图像素坐标和经纬度坐标互转
  16. 《Look More Than Once(LOMO):An Accurate Detector for Text of Arbitrary Shapes》论文笔记
  17. 服务器怎么直接访问数据库文件路径,如何在服务器中找到数据库文件路径
  18. 量化指标公式源码_量化指标副图指标 源码 通达信 贴图 无未来
  19. 微信小游戏上线字节平台超全攻略
  20. 图片怎么转换为jpg格式的?照片如何在线转格式?

热门文章

  1. 《动手学ROS2》3.4小游戏_小乌龟求偶大作战
  2. 王权富贵:jupter添加python环境
  3. 如何使用视频合并软件,快捷批量合并视频
  4. 简单3步,在线制作GIF宣传动图
  5. 6款插件,满足你的报表多样化、个性化、酷炫的报表需求(附下载)
  6. 烟雨凤凰 美食与美景
  7. 欧陆战争5设备系统时间与服务器时间不一致,欧陆战争5怎么调整时间bug
  8. funnyrsa1-ctf.show(e与phi不互素)
  9. Chrome 缓存文件设置
  10. 固件远程更新之STARTUPE2原语(fpga控制flash)