unsigned long long F(unsigned long long p, unsigned long long N)
{
unsigned long long s = 0ull;
if (p < N)
for (int i = p+1; (N-i) > i; ++i)
s += F(i, N-i);
return s;
}
函数总是返回零,尽管输入是什么。为什么会这样?
答案 0 :(得分:4)
F()
应该做什么?
每个p, N
确实返回零 - 您必须在某处向s
添加一些非零值,您只需添加s
F(...)
的结果,即再次,零。
你有没有错过一些你想在某一行添加到s
的其他价值?
答案 1 :(得分:2)
对于不是无限的递归,if
或for
主体不能在更深层次的嵌套调用中执行。该函数将等效于unsigned long long s = 0ull; return s;
并返回0.调用者将该0添加到它的局部变量s
,产生0.对F
的所有调用最终都会添加0并返回结果
答案 2 :(得分:2)
采用以下功能,这是您的简化版本:
int F(int a, int b)
{
int c = 0;
if (a < b)
{
c += F(a + 1, b);
}
return c;
}
电话F(1, 3)
如下:
F(1, 3)
c = 0 +
F(2, 3)
c = 0 +
F(3, 3)
c = 0
0 + 0 + 0 = 0
正如其他人已经提到的那样,因为您正在初始化c = 0
,所以您得到的结果为零。