【无标题】

自己对于循环细节的整理,以后一定按照这个思考进行循环和递归的书写

# 循环是很容易犯细节错误的
# 1.结果集定义(结果集定义模糊)
# 2.初始化状态(有意义无意义)
# 3.循环体(逻辑错误)
# 4.结束条件(差一)

# 不应该割裂他们来分析各个部分的错误原因,为什么要这么讲
# 循环体是为了得到结果集,所以结果集对于循环体的内容是重要的
# 初始状态的有意义和无意义也是针对于结果集
# 结束条件也是根据初始状态而言的
# 所以不应该割裂他们来看

# 细节错误一般发生在哪里?
# 结果集定义不明确
# 初始化的原因
# 循环体逻辑问题
# 结束差一
# 全是细节问题

# 结果集定义首先是没得说,一定明确好问题
# 初始化:这个地方容易出现细节错误
# 首先初始化状态:一系列线性相关的状态:x1,x2,x3,......,xn,其实只要其中某几个量就可以把整个状态描述出来
# 但是结果集的需要,所以才有了这么多的线性相关的状态,所以结果集的确定很重要,只有确定结果集,才知道要那些状态
# 才知道有哪些“基”
# 接下来才是最容易出现细节的地方

# 标准基得到之后,标准基是我们去确定循环范围的重要因素
# 标准基被放入到结果集中,那么相应的那一组状态就被放入到结果集中了
# 标准基没有被放入,那么就没有被放入,他们两者要对应统一,否则,就会发生细节错误,重复放入
# 标准基也被用于初始条件以及结束条件
# 总结,循环和递归重要
# 结果集定义-------->总状态定义------->标准基状态----->初始化状态(包括标准基状态和其他结果集关心的线性相关的状态)----->结束条件(左闭右开)
# 初始化时:初始化状态是否被包含在结果集中?1.不包括:那就不用提前做一步,所有的都在循环中完成,也是最清晰的
# 2.包括,那就容易出现错误,忘记已经包括在里面,没有设置标准基状态,1.出现重复放入错误。
# 所以尽量使用第一种方式,不包括在结果中
# 但是这种也是会出现问题的,由于初始状态在此之前没有放入结果集中,初始状态之前也没有状态了,所以再循环体中,循环也没有办法判断是不是应该把它放进来
# 所以用这种方式时,最好在初始状态之前有一个“无意义状态”,这个状态表示“一定无法发生,任何人和我比较都是会成功的”,这样确保初始状态一定会放入其中
# 请注意,所有的“比较”都是用“标准基”,只有存放进入结果集相关的才使用“所有状态”
# 所有你有两条路
# 1.确定结果集---->2.确定的存储状态---->3.确定“标准基”---->4.确定边界条件(左闭右开)---->5.初始化(包括标准基初始化,和其他结果集重要的线性相关的状态初始化)
# 逻辑框架:1.不监测初始化状态是否被包含到结果集中:在初始化状态之前------>无意义状态(只针对标准基,作比较用的),保证进入循环后,初始化状态一定被监测。
#         2. 已经自己做好监测,初始化状态是否已经被包含到结果集中。记住要变化标准基状态,因为相当于提前做了一步,已经做了一步状态转移,否则会出现重复放入的危险.

其实这里也是细节问题,下面就是两种写法的具体实现

    # 初始化状态是否提前书写也在影响着循环体的逻辑
    # 如果在初始状态之前,你有无意义状态,并且并没有提前做初始化状态,那么你在循环体内部就先做状态的读取
    # 而如果你有提前做状态的初始化,但是你没有做标准基的“转移”,实质上还没有状态转移,那么你就要先做状态的存储,然后做状态转移
    # 这导致循环体的逻辑发生变化

1.第一种方式:提前做好部分初始化状态,但是“标准基状态”没有发生转移

初始化状态定义:x1,x2,x3,x4,x5......xn,***但是标准基状态们:xn+1,xn+2,xn+3,....xn+d,没有发生转移***,也就是说,是一种没有发生实质状态转移的,部分状态发生转移的“假转移”。
while (结束条件)
{
	//先发生标准基状态转移
	//状态存储
	//其他结果集关心状态发生转移
}

2.第二种方式:不提前做好结果集初始化状态,标准基发生转移

while(结束条件)
{
	//先发生所有状态转移,包括从无意义状态到初始化状态的转移。
	//状态存储
}

结论

可以发现,经常使用的while体系,是有许多细节的
最好遵循的是:

  1. 有无意义状态.(初始化细节)初始化状态也不要提前做部分初始化,放在循环体内完成。标准基先发生转移。

  2. 不要做部分初始化状态的提前初始化,放在循环体中减少逻辑错误.(循环体细节)用第二种方式即可。

  3. 做好差一错误准备(结束条件细节)

    # 无意义状态
    # 初始状态
    # 最终问题:标准基先发生转移  还是与之关联的结果集关注的,线性相关的状态先发生转移
    # 先鸡后蛋和先蛋后鸡的额问题
    # 按照我的理解这样会导致循环体的逻辑发生变化
    
    # 确定这样的观点,一旦进入循环,那就是问题根源所在,谁先谁后的问题
    # 这就是问题本源所在,谁先谁后的问题,导致循环体逻辑出现问题,结束条件
    # 传统上:
    # 进入循环前,先做一步标准基的由“无意义标准基”---->"初始化第一个状态"(初始化细节)
    # 这样,循环体内部,先结果集关心的状态转移,然后是标准基转移(循环体细节)
    # 最终,边界结束(左闭右开)
    
    # 总结,折腾了这么久,其实就是一个先鸡后蛋还是先蛋后鸡引起的循环体逻辑和结束条件以及初始条件的问题
    # 是进入循环前,先由“无意义标准基”---->"初始化第一个状态的标准基",然后进入循环开始状态转移
    # 还是,提前做好第一步的状态转移,然后进入循环的问题。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值