阅读我不知道它的含义的主题: 函数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));
}
答案 0 :(得分:4)
这显然是不正确的。递归函数调用本身并包含一个停止条件:
#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));
}
如果传入的整数是负数,你的函数应该怎么做?递归仍然有效吗?或者你应该抛出一个例外来向来电者表明合同已经破裂了吗?
答案 1 :(得分:2)
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
}
答案 2 :(得分: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);
}
}