C语言中的递归问题(数组中奇数之和)

C语言中的递归问题(数组中奇数之和),c,recursion,sum,C,Recursion,Sum,我对递归函数有疑问。程序应该计算n个奇数整数的和,并且每次我们找到和时,我们必须打印以下内容: 例如,如果用户给出5个数字(5,4,3,2,1),列表将为: 5 4 3 2 1 然后它将打印: 5[0](是)4[5](是)3[5](是)2[8](否)1[8](否) 首先,它打印数字,然后在[]中打印下一个奇数的和,如果每个节点中的数字^2大于其下一个奇数的和,则在括号的末尾打印a(是)或(否)。就像第一个,5>0,所以是肯定的 到目前为止,我已经写了这篇文章,但我无法打印,有什么遗漏吗 int

我对递归函数有疑问。程序应该计算n个奇数整数的和,并且每次我们找到和时,我们必须打印以下内容:

例如,如果用户给出5个数字(5,4,3,2,1),列表将为:

5 4 3 2 1

然后它将打印:

5[0](是)4[5](是)3[5](是)2[8](否)1[8](否)

首先,它打印数字,然后在[]中打印下一个奇数的和,如果每个节点中的数字^2大于其下一个奇数的和,则在括号的末尾打印a(是)或(否)。就像第一个,5>0,所以是肯定的

到目前为止,我已经写了这篇文章,但我无法打印,有什么遗漏吗

int checkSumOfOdds(struct list *ptr) {
    int k=0;

    if (ptr != NULL){
        k = checkSumOfOdds(p->next);
        if((ptr->next)^2 > k){
            printf(" %d [%d] (YES)",ptr->value, k);}
        else{
            printf(" %d [%d] (YES)",ptr->value, k);}

        k += ptr->value;
        return k;
    }

    return 0;
}

根据问题陈述,要显示的值从第一次输入到最后一次输入先是5,然后是4

这决定了递归函数的行为。它是先称自己,还是在最后称自己?在您的情况下,头值将首先处理,因此递归调用将在数字处理后完成。最后

那么您的测试
如果(ptr!=NULL)
应该只影响递归调用,而不是整个函数体

^
运算符是独占的或在C。。。可能不是你想要的(虽然可以使用它,但不是那样)。要测试一个数字是否为奇数,只需检查其第一位(使用
&1
),或检查
N%2
是否为
>0

由于数字在较早的时候被处理和显示(因为递归调用在末尾),所以您可以在调用时携带总和

我猜要显示的总和应该从当前数字开始(或者,作为练习,简单地延迟总和…)

应该工作的代码示例

int checkSumOfOdds(struct list *ptr, int sum) {
     int isodd = ptr->value & 1;
     if (isodd) sum += ptr->value;
     printf("%d[%d](%s) ", ptr->value, sum, isodd ? "Yes":"No");
     return ptr->next ? checkSumOfOdds(ptr->next, sum) : sum;
}
被称为

 checkSumOfOdds(headOfList, 0);
 printf("\n");

您希望
(ptr->next)^2>k
测试做什么?该代码甚至都不会编译,是吗?“4”应该打印“否”,否?我错了,如果用户给出(1,2,3,4,5),列表将是:1,2,3,4,5,但在最后,它会打印;5[0](是)4[5](是)3[5](是)2[8](否)1[8](否),放弃反向相位,您可能可以修改上述代码以满足新要求,对吗?