【发布时间】:2018-10-08 07:37:24
【问题描述】:
我正在编写一个程序,以递归方式计算 x 元素之前的所有元素的摘要。它总是返回 0。请你帮帮我 - 当我在 main 中调用 SumBeforeX 函数时,你能解释一下它是如何有序地工作的吗?
这是我的代码和
#include <stdio.h>
int SumBeforeX(int a[], int n, int x)
{
int i = 0;
static int s = 0;
if (n == 0)
return 0;
if (a[i] == x)
s+=SumBeforeX(a, i -1, x) +a[i-1];
return s;
}
void main()
{
int a[] = {2,6,13,17,47,8};
printf("%d",SumBeforeX(a,6,13));
_getch();
}
【问题讨论】:
-
不管某些编译器允许什么,
main()的所有有效签名都具有int的返回类型 -
我建议您花一些时间来learn debugging in general,更具体地说,如何使用调试器逐行执行您的代码。
-
i-1 等于 - 1
-
您需要重新考虑如何使用
n和i。它们应该以某种方式连接。 -
递归调用中的
static违背了这个概念。在您的情况下,也使其成为 一次性使用功能。
标签: c