【问题标题】:c program recursive function odd [closed]c程序递归函数奇数[关闭]
【发布时间】:2011-07-21 18:42:38
【问题描述】:

我需要一个 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);                         
            }

        }

    }

}

【问题讨论】:

  • 您应该尝试自己编写该程序。如果您有具体问题,请发布您的代码并寻求指导。
  • 我试过这个:pastie.org/1706480
  • 你要求stackoverflow做你的功课?哇。哇。 -1.
  • 哦,不知道什么是递归?我想你是反过来的。该屏幕截图是迭代的。
  • @tyler 那么,谁删除了你的答案?

标签: c function recursion functional-programming


【解决方案1】:

除了他们对你的所有乐趣之外,我知道你是诚实地标记“家庭作业”。我要向您展示的是您的解决方案。为了充分利用这一点,您应该了解它。如果没有,那你只是在自欺欺人。我真的希望这可以在其他方面对您有所帮助,而不仅仅是完成家庭作业。

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

#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 语言的努力的象征吗? ;)

保重! 贝科。

【讨论】:

  • 阅读您的代码后,我注意到您使用了前向递归。这是一个更像您的第一个直觉的示例:pastebin.com/UQEeRi7K 现在,如果您调试两个递归,它们之间的主要区别是什么以及它们移动信息的方向?
  • 主要区别是:*seven = *seven + m[pos] 和 *sodd= *sodd + m[pos]。前一个 sum 与当前 pos 值和最终 printf。谢谢你的时间。
  • 其实理解路径的主要区别是一个是调用函数时添加,一个是返回时添加。
猜你喜欢
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2014-10-29
  • 2021-12-07
  • 1970-01-01
  • 2022-01-19
  • 2023-02-04
  • 2018-05-20
相关资源
最近更新 更多