c程序递归函数奇数

c程序递归函数奇数,c,function,recursion,functional-programming,C,Function,Recursion,Functional Programming,我需要一个C中的递归函数,它检查/比较数组奇数位置的值与偶数位置的值之和。也可以在函数内部打印更大的总和 比如: printf("\nThe bigger sum is %d. \n evensum = %d , oddsum = %d \n",bigger, evensum, oddsum); 假设数组有8个位置,我们从main用随机值填充它 这就是我到目前为止所做的: #include <stdio.h> #define N 4 int checksum(int matri

我需要一个C中的递归函数,它检查/比较数组奇数位置的值与偶数位置的值之和。也可以在函数内部打印更大的总和

比如:

printf("\nThe bigger sum is %d. \n evensum = %d , oddsum = %d \n",bigger, evensum, oddsum);
假设数组有8个位置,我们从main用随机值填充它

这就是我到目前为止所做的:

#include <stdio.h>
#define N 4


int checksum(int matrix[], int position, int sum1, int sum2); 

int main(void)
{
    int mat[N];
    int i,j;

    printf("\nEnter the %d numbers:\n", N); 

      for(i = 0; i < N; i++)
      {
        printf("%2d> ",i);
        scanf("%d", &mat[i]);
      }

      checksum(mat, 0, 0, 0);       


}

int checksum(int m[], int pos, int s1, int s2){

if(pos<N){
    if(pos==0){
            s1 = m[pos];    
            checksum(m, pos+1, s1, s2);         
        }else{
            if(pos%2){
                return s1 + checksum(m, pos+1, s1, s2);     

            }else{
                return s2 + checksum(m, pos+1, s1, s2);                         
            }

        }

    }

}

除了他们取笑你之外,我知道你是诚实的。我要向你们展示的是你们的解决方案。要充分利用这一点,你应该理解它。如果不是,你只是在愚弄自己。我真的希望这能在其他方面帮助你,而不仅仅是做家庭作业

您仍然需要使用随机值来实现向量,并打印更大的值。但这是小菜一碟。递归可以这样进行:

#include <stdio.h>
#define MAX 10

int sum(int *x, int n, int odd)
{

    if(odd==-1)
    {
        printf("odd = %d, even = %d\n", sum(x, n, 1), sum(x, n, 0));
        return 0;
    }

    if(n%2!=odd)
        return sum(x, n+1, odd);

    if(n>=MAX)
        return 0;

    return x[n]+sum(x, n+1, odd);
}



int main(void)
{
    int x[MAX]={0,1,2,3,4,5,6,7,8,9};

    sum(x, 0, -1);

    return 0;
}
首先,你的问题缺少。。。如果您在标记作业处暂停鼠标光标阅读定义,您将阅读并显示足够的努力

因此,请在根据需要修改代码后,在这里展示最终答案,作为您学习c语言努力的象征

保重!
因为。

你应该试着自己写那个程序。如果您有具体问题,请发布代码并寻求指导。我尝试过这样做:您是在要求stackoverflow做家庭作业吗?哇!哇-哦,我不知道递归是什么?我想你是从另一个角度理解的。那个屏幕截图是迭代的。@tyler,谁删除了你的答案?在阅读了你的代码后,我注意到你使用了前向递归。这里有一个更像你第一个直觉的例子:现在,如果你调试两个递归,它们之间的主要区别是什么,它们移动信息的方向是什么?主要区别是:*seven=*seven+m[pos]和*sodd=*sodd+m[pos]。上一个和当前pos值以及最终打印F。感谢您的时间。实际上,理解路径的主要区别在于,一个是在调用函数时添加,另一个是在返回时添加。