【问题标题】:What will this recursive function yield?这个递归函数会产生什么?
【发布时间】:2020-07-23 09:41:13
【问题描述】:

我有一个递归函数g3,我不明白它背后的逻辑是什么,以及它在一般情况下的实际作用。

double g3(double n) {
    if (n <= 1)
    {
        return 2;
    }
    double temp = g3(n / 2);
    return temp * temp;
}
  • 1 我得到 2
  • 2 我得到 4
  • 3 我得到 16
  • 4 我得到了 16

你能帮我理解它的作用吗?

【问题讨论】:

  • 你对代码有什么不明白的地方?你跑了吗?它返回了什么?
  • 你为什么不告诉我们你得到了什么作为输出以及问题的哪一部分?
  • f(x) = f(x/2)^2
  • @CacahueteFrito 好的,我知道我正在寻找最终值...
  • 我用铅笔和纸,看看我编辑的帖子...

标签: c algorithm function


【解决方案1】:

您可以从分析案例开始,从停止子句开始,不仅要查看“数字”,还要查看它所代表的含义:

g3(1) = 2 = 2^1
g3(2) = g3(1)^2 = 2^2
g3(4) = g3(2)^2 = (2^2)^2 = 2^4
g3(8) = g3(4)^2 = (2^4)^2 = 2^8
g3(16) = g3(8)^2 = (2^8)^2 = 2^16

所以,这很清楚(我希望)当 n = 2^k 为某个整数 k 时会发生什么。

  • 你能证明吗?
  • 您能否重复该过程以回答当n != 2^k 为某个整数k 时会发生什么?

【讨论】:

  • 如果n 不是整数(n=2.8)怎么办?
  • @AlexLop。见第二条。它也可能不是 2 的幂。这是一个部分答案,旨在为 OP 指明如何解决此类问题。
  • 我明白了。我错过了你只是在引导 OP 找到答案的观点。
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2017-02-26
  • 2012-08-02
相关资源
最近更新 更多