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).
是的,这是作业的一部分,但如果没有不允许的附加功能,我无法解决它.
如果我们假设计算中没有溢出:
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否则返回.
我将把它留作适当处理溢出的练习.