为什么下面两个函数会等价?

发布于 2022-09-12 23:27:08 字数 566 浏览 9 评论 0

image.png

几个例子

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

つ低調成傷 2022-09-19 23:27:08

首先有一个推导公式
2 ** 0 + 2 ** 1 + ... + 2 ** (n - 1) == 2 ** n - 1

再已知 sn = s(n-1) * 2,那么
s1 = 2
s2 = s1 * 2 - 1 
   = 2 ** 2 - 1 
   = 2 ** 2 - 2 ** 0
s3 = s2 * 2 - 1 
   = 2 ** 3 - 2 ** 1 - 2 ** 0
s4 = s3 * 2 - 1 
   = 2 ** 4 - 2 ** 2 - 2 ** 1 - 2 ** 0
s4 = s4 * 2 - 1 
   = 2 ** 5 - 2 ** 3 - 2 ** 2 - 2 ** 1 - 2 ** 0

由s4推导
s4 = 2 ** 5 - (2 ** 3 + 2 ** 2 + 2 ** 1 + 2 ** 0)
   = 2 ** 5 - (2 ** 4 - 1)
   = 2 ** 5 - 2 ** 4 + 1
   = 2 ** 4 + 1
  
所以 sn = 2 ** n + 1

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

梦言归人 2022-09-19 23:27:08

$$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$$

栀梦 2022-09-19 23:27:08

对f1进行归纳,可得 f1(n+2)=(2ⁿ﹣¹ +1)X2-1,化简得f1(n+2)=2ⁿ+1 =f2(n);

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文