为什么下面两个函数会等价?
几个例子
f(3) = 3
f(1) = 3
f(4) = 5
f(2) = 5
一个 typescript 实现是
function gen(n: number): number {
function f(n: number): number {
if (n === 2) {
return n
}
return f(n - 1) * 2 - 1
}
if (n < 0) {
throw new Error()
}
return f(n + 3)
}
function gen2(n: number): number {
return Math.pow(2, n + 1) + 1
}
它们在输入相同的情况下结果也是相同的,感觉有点奇怪。。。
看起来和等比数列推导有关,不过已经全还回去了 xd
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
首先有一个推导公式
2 ** 0 + 2 ** 1 + ... + 2 ** (n - 1) == 2 ** n - 1
$$a_{n}=2a_{n-1} -1$$
$$a_{n}-1=2(a_{n-1} -1)$$
所以$$\{a_{n}-1\}$$
是一个首项为2, 公比为2的等比数列, 由等比数列通项公式得
$$a_{n}-1=2 * 2^{n-1}$$
则$$a_{n}=2^n+1$$
对f1进行归纳,可得 f1(n+2)=(2ⁿ﹣¹ +1)X2-1,化简得f1(n+2)=2ⁿ+1 =f2(n);