昨晚接到百度电话面试,其中有道题并不难但很有意思,不过当时可能脑子打弯,只是列出了公式没有把具体的解决方案拿出来,今天早上突然想起来怎么做了,打算记录下来。
这是一个关于梦境的题,暂且叫做“盗梦空间”吧:
假设人有多重梦境,现实生活中的1s在第一层梦境的虚拟时间是0.05s,在第二层梦境度过的虚拟时间就是第一层梦境的0.05倍,以此类推...如果这个人有1层梦境,那么他在现实中度过一秒,就相当于真实时间+梦境的虚拟时间也就是1.05s,那如果这个人有n层梦境,那他相当于度过了多少时间?
如果按照一个数学思路来解析的话可以抽象成这样一个公式:(y就是度过的时间,x是真实时间,p是梦境中的时间换算倍数,n是多少层梦境)
y = x+x*p^1+x*p^2+...+x*p^n
其实抽象成递归解决思路很容易,为了方便我用python写了出来:
其中num是梦境层数,p是梦境中的时间换算倍数,x是真实时间,返回值就是度过的时间了。
上边的程序运行结果: