用递归计算函数f(n)
Calculate the function F(n) with recursion
阅读我不知道它在说什么的主题:在非阴性整数上确定的函数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);
}
}
相关文章:
- 如何在 c++ 的类中递归调用函数方法?
- 使用变量模板的递归计算 - gcc 与 clang
- 递归 pCall 函数
- C++:递归成员函数模板
- 返回未定义行为的递归行列式函数
- 使用递归计算一个函数中的高度和大小
- 变分模板递归构造函数问题
- 如何使用递归计算从 0 到给定数字的奇数?
- 链表中的递归长度函数实现
- 具有 4 个指针的节点的递归插入函数返回 null
- 循环访问多个模板参数的递归模板函数
- 为什么这个递归 lambda 函数不安全?
- 可变参数模板中递归模板函数的终止问题
- 使用递归的函数未按预期工作
- 5000+ 深度递归时函数堆栈溢出
- 使用条件运算符递归计算模板化值或函数时出现错误 C1202(堆栈溢出)
- 递归计算在不使用静态局部变量,全局变量或静态函数的情况下,在递归函数中发生的环数
- 递归计算函数f = n!/(c^n)的值
- friend get 函数,返回通过可变参数模板递归计算的类型
- 用递归计算函数f(n)