仅使用递归编写C函数

evg*_*rov 2 c algorithm recursion

我想知道数组中的偶数之和是否等于奇数之和,只使用递归而没有任何附加函数,除了递归和没有任何静态变量.

如果奇数之和等于偶数之和,则函数返回1,否则返回0.数组中的所有数字均为非负数.

函数签名应如下所示:

function(unsigned int a[], int n)
Run Code Online (Sandbox Code Playgroud)

到现在为止我写了以下内容:

function(unsigned int a[], int n)
{ 
    if(n==0) return 0;
    return (a[0]%2)?((a[0]+function(a+1,n-1)):(-a[0]+function(a+1,n-1));
}
Run Code Online (Sandbox Code Playgroud)

此函数返回所需的总和,但不返回问题的答案(如果是,则为1,否则为0).

是的,这是作业的一部分,但如果没有不允许的附加功能,我无法解决它.

jxh*_*jxh 9

如果我们假设计算中没有溢出:

int function (unsigned int a[], int n) {
    if (n >= 0) return !function(a, -n-1);
    if (++n == 0) return 0;
    return function(a+1, n) + ((a[0] % 2) ? -a[0] : a[0]);
}
Run Code Online (Sandbox Code Playgroud)

在第一次调用函数时,n它是非负的,并反映了数组的大小.我们递归地调用函数并在逻辑上否定结果,并且算术否定n+1.关闭一个否定允许-1代表0

在随后的呼叫中,均衡的总和是积累的,并且赔率是负累积的.负数n增加直到达到0.对负数进行递归调用的结果n是,0如果总和相等,则否则为非零.

在返回最外层调用时,逻辑否定将翻转它,以便1在总和相等时返回,0否则返回.

我将把它留作适当处理溢出的练习.