尾递归把妹法
尾递归是针对传统的递归算法而言的,传统的递归算法在很多时候被视为洪水猛兽。它的名声狼籍,好像永远和低效联系在一起。
尾递归就是从最后开始计算,每递归一次就算出相应的结果,也就是说,函数调用出现在调用者函数的尾部,因为是尾部,所以根本没有必要去保存任何局部变量。直接让被调用的函数返回时越过调用者,返回到调用者的调用者去。
传统把妹算法是一个O(n)复杂度的算法。由于把妹算法的完成时间无法预估,也就是问题规模n无法预估,而且使用传统的递归把妹算法时,每进行一次递归,都需要在堆栈上保存新的状态,因此,对堆栈深度的需求也是无法预估的。在问题规模较大,也就是妹子比较顽固的情况下,极有可能导致堆栈溢出。鉴于此,我们应该使用尾递归算法来解决这个问题。
具体来说,我们可以假设当某一天妹子吃完早餐之后,会给出非零的返回值,意即把妹成功。因此,只需要在递归函数的尾部返回妹子在下一天吃完早餐之后的返回值,即可实现尾递归。
由于尾递归并不需要额外的堆栈空间,因此,可以更高效地获得妹子的最终返回值。
以下是使用类Lua语法实现的伪代码:
require(\
function HandleSister(day)
if Sister:EatBreakfast(day) == 1 then return 1 else
-- tail recursive
return HandleSister(day + 1) end end
马斯洛需要层次理论早餐把妹法
首先简单介绍下马斯洛的层次理论:
按马斯洛的理论,个体成长发展的内在力量是动机。而动机是由多种不同性质的需要所组成,各种需要之间,有先后顺序与高低层次之分;每一层次的需要与满足,将决定个体人格发展的境界或程度。 马斯洛认为,人类价值体系存在两类不同的需要,一类是沿生物谱系上升方向逐渐变弱的本能或冲动,称为低级需要和生理需要。一类是随生物进化而逐渐显现的潜能或需要,称为高级需要。
这个应用是非常的明显的
对于早餐把妹必须考虑到层次的问题,层次的细化可以按照马斯洛的层次分化:自我实现 ,尊 重 需 求 ,社 交 需 求 ,安 全 需 求 ,生 理 需 求;
按照类似进化层次想需求,刚开始我们应该放的早餐必须是简单的,而后的早餐越来越丰富,而早餐妹则渐渐满足满意了这个要求。再接着继续满足下一个层次的需求,当然到后面的高级需求不一定是物质上的,也指精神上的需求,只到最后可以让她感觉到自我实现这个时候就大功告成了。
千呼万唤始出来 ---- 牛顿把妹法
看到现代物理硕果累累,经典物理也不禁跃跃欲试
众所周知,牛顿三大定律是经典物理中经典:
牛顿第一定律(惯性定律):物体在不受外力的作用下,总保持匀速直线运动状态或静止状态,直到有外力迫使它改变这种状态为止
牛顿第二定律(加速度定律):物体的加速度跟物体所受的合外力成正比,跟物体的质量成反比,加速度的方向跟合外力的方向相同
牛顿第三定律(作用力与反作用力定律):两个物体之间的作用力和反作用力,大小相等,方向相反
应用到把妹学上就是:
牛顿把妹法第一定律:在不受外力作用时,妹总是沿原生活轨迹匀速直线运动,或保持静止