用递归计算函数f(n)

Calculate the function F(n) with recursion

本文关键字:递归计算 函数      更新时间:2023-10-16

阅读我不知道它在说什么的主题:在非阴性整数上确定的函数f(n)如下:F(0)= 1;F(1)= 1;f(2n)= f(n);f(2n 1)= f(n) f(n 1)通过递归计算出F(n)。和我的代码:

#include<iostream.h>
double TINH_F(int n)
{
    if(n == 0)
   {
      return 0;
   }
    if(n == 1)
    {
      return 1;
    }
     return (F(n+1) - F(2*n+1));
}

这显然是不正确的。递归函数调用本身,包括停止条件:

#include<iostream.h>
double TINH_F(int n)
{
    if(n == 0)
   {
      return 0;
   }
    if(n == 1)
    {
      return 1;
    }
     // Note the function name change
     return (TINH_F(n+1) - TINH_F(2*n+1));
}

如果通过整数通过是负面的,您的功能应该怎么办?递归仍然有效吗?或者您应该提出一个例外,向呼叫者表明合同已损坏?

int f(int n)
{
    if (n<0) return -1; // check if n is positive
    if (n<=1) return 1; // we can catch the first two cases in a single condition
    int half = n/2;
    if (n % 2 == 0) return f(half); // if n is even
    else return f(half) + f(half+1); // if n is odd
}

您的最后一个案例说

  • f(n)= f(n 1) f(2 * n 1),用于所有n> 1

如果您仔细阅读了定义,则不会在任何地方提及此情况。

我相信您被参数的命名所欺骗 - 您需要四个案例。

让我们分解:

  • f(0)= 1(或0-您的定义说1,但代码说0 ...)
  • f(1)= 1
  • f(2n)= f(n)
  • f(2n 1)= f(n) f(n 1)

前两种情况是微不足道的。

第三种情况说,如果参数 - 我们称其为 m-甚至是,结果是 F(m/2)

第四案例说,如果参数 m奇怪,结果为 F(m/2) + F(m/2 + 1)
(确认算术为练习。)

在C 中:

unsigned int TINH_F(unsigned int n)
{
    if(n == 0)
    {
        return 1;
    }
    else if(n == 1)
    {
        return 1;
    }
    else if (n % 2 == 0)
    {
        return TINH_F(n / 2);
    }
    else
    {
        return TINH_F(n/2) + TINH_F(n/2 + 1);
    }
}