一、题目描述

股神问题:
买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天…依此类推。
为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?

二、问题分析

将问题具体化:

通过将问题化解为子类问题后得知:每次的变化其实就是增加1、2、3、4、5、n次之后减1,首先我想到的是利用递归来解决该问题,但是递归的结束条件必须选好,之后我再利用while循环解决此问题得到方法二。

三、问题解决

1、方法一:利用递归解决

package com.demo1;import java.util.Scanner;public class Main {//初始值int price = 1;int days = 1;int add = 0;public  static void main(String[] args) {Main main = new Main();Scanner scanner = new Scanner(System.in);System.out.println("请输入第n天(输出n天以前的所有价格):");int n = scanner.nextInt();main.getShare(n);}/*** 方法一、利用递归* @param n*/public void getShare(int n) {add = add+1;//初始的“+”次数为1System.out.println("第"+days+"天"+": "+"股票值"+price+"元");for(int i=0;i<add;i++) {price = price+1;//价格+1days = days+1;//天数自动递增//判断当实际的天数大于我们想要输入的天数后,停止循环,输出结果if (days > n) {break;}else{System.out.println("第"+days+"天"+": "+"股票值"+price+"元");}}price = price-1;//价格减1days = days+1;//天数自动递增//递归:结束条件为当输入参数天数n大于等于实际天数if (days <= n) {getShare(n);//递归}}
}

结果:

2、方法二:利用while循环
(1)代码:

package com.demo1;import java.util.Scanner;public class Main {//初始值int price = 1;int days = 1;int add = 0;public  static void main(String[] args) {Main main = new Main();Scanner scanner = new Scanner(System.in);System.out.println("请输入第n天(输出n天以前的所有价格):");int n = scanner.nextInt();main.getShare1(n);}/*** 方法二利用while* @param n*/public void getShare1(int n) {add = add+1;//初始的“+”次数为1System.out.println("第"+days+"天"+": "+"股票值"+price+"元");//类似于递归,同样也是对子类问题循环while(true) {for(int i=0;i<add;i++) {price = price+1;//价格+1days = days+1;//天数自动递增//判断当实际的天数大于我们想要输入的天数后,停止while循环,输出结果if (days > n) {break;}System.out.println("第"+days+"天"+": "+"股票值"+price+"元");}add = add+1;price = price-1;//价格减1days = days+1;//天数自动递增//判断当实际的天数大于我们想要输入的天数后,停止while循环,输出结果if (days > n) {break;}System.out.println("第"+days+"天"+": "+"股票值"+price+"元");}}
}

(2)结果

两种方法的运行时间比较:

简单编写代码测试数据,从数据少的情况到数据大的情况分析。

(1)选择方法一输入n=10的数据。

选择方法一输入n=100的数据。

选择方法二输入n=1000的数据。

(2)选择方法二输入n=10的数据。

选择方法二输入n=100的数据。

选择方法二输入n=1000的数据。

  • 粗略测试之后得出的结论:while循环方法在数据量相对大的情况下都会比递归方法运行时间短,执行效率相对比较高。

  • 当然这是因为递归算法在函数调用过程中,包括一些变量的初始化,函数的出栈入栈等等造成相对大的资源消耗导致的运行效率较低,但并不是大家认为的递归算法都是低效率的。通过优化的递归算法值得学习,还有树形结构、文件的相关操作都会用到递归算法。

PS:如有做的不好的地方或者有更好的算法,非常欢迎多多指教。

基础算法一一股神问题相关推荐

  1. [算法JS]-股神(股票第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推)...

    这个是赛码网上的编程题,在这个网站上刷算法真是费劲啊,因为,编译不通过的时不会告诉你编译错误的地方,所以,对码代码的规范性和准确性要求还是挺苛刻的... 题目描述 有股神吗? 有,小赛就是! 经过严密 ...

  2. 赛马网基本算法之一 (股神问题)

    题目描述 有股神吗? 有,小赛就是! 经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推. 为 ...

  3. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  4. (转)量子位:这个AI股神把顶级对冲基金吓尿了

    每次都能盈利,自己学会抄底,这个AI股神把顶级对冲基金吓尿了 量子位 https://zhuanlan.zhihu.com/p/29750335?utm_medium=social&utm_s ...

  5. 昨日,全球股市进入ICU!89岁股神巴菲特惊叹活久见!苹果微软万亿美金市值摇摇欲坠...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 昨日,全球股市进入ICU! 美股遭遇史上第三次熔断--第一次是在1997年,第二次 ...

  6. 活久见!巴菲特被诈骗50亿,股神真的糊涂了?

    本文经授权转载自公众号"无相财经" ID | wuxiangcj 作者 | 无相出品 国运的上升和下降,与个人息息相关. 粤语里有一个词,叫"老猫烧须". 意思 ...

  7. 1. 通用基础算法(1.7动态规划算法/1.8模拟算法/1.9其他算法)

    7  动态规划算法 动态规划(Dynamic Programming)是求多阶段决策过程(Multistep Decision Process)最优化的一种数学方法,它将问题的整体按时间或空间的特征分 ...

  8. 力扣股神之路动态规划

    股神之路 买股票最佳时机 买股票最佳时机2 309. 最佳买卖股票时机含冷冻期 714. 买卖股票的最佳时机含手续费 买股票最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i ...

  9. Pascal 基础算法教案

    基础算法教案  目录       第一课 算法简介... 1 第二课 多精度数值处理... 1 第三课 排列与组合... 6 第四课 枚举法... 9 第五课 递归与回溯法... 25 第六课 递推法 ...

最新文章

  1. 基本系统部署完成!北斗三号闪耀中国智慧
  2. 漫画:什么是 “抽象工厂模式” ?
  3. 水抗攻击 apt攻击手段
  4. Java线程详解(16)-条件变量
  5. Linux:hping高级主机扫描
  6. XidianOJ 1099 A simple problem
  7. Android Gradle编译问题
  8. C#打开文件和文件夹
  9. Django讲课笔记03:创建Django项目
  10. 运行gclient一直没反应_安川变频器通电没反应维修措施分享
  11. ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)
  12. 【Django 2021年最新版教程28】前端模板中 时间日期星期格式化
  13. 3、Keras中的顺序模型Sequential和函数式模型Model
  14. 热传导方程有限差分法实现matlab,热传导方程有限差分法的MATLAB实现-史策
  15. Shiro-单点登录原理
  16. LaTeX及TeXstudio下载地址
  17. 【软考系统架构设计师】2021年下系统架构师案例分析历年真题
  18. Katana如何渲染序列
  19. 零基础入门:基于开源WebRTC,从0到1实现实时音视频聊天功能
  20. spark(scala) shell 里面输入多行代码

热门文章

  1. 关于GPL协议的理解(开源与商用、免费与收费的理解)
  2. GPL和LGPL的区别!
  3. StarUML3.0 的破解方法
  4. 上手Pandas,带你玩转数据(6)-- 摆脱对pandas可视化丑图的刻板印象吧
  5. 服务器-Squid代理服务器及应用
  6. Android实现截屏的方法
  7. Python调用WPS进行文档转换PDF及PDF转图片
  8. 时间序列分析中的自相关
  9. 用户画像标签数据存储之Elasticsearch存储
  10. ✖ 2 problems (0 errors, 2 warnings) 0 errors and 2 warnings potentially fixable with the `--fix`