![](/img/trans.png)
[英]Program C Recursion (Sum of odd numbers in array) Problem with the square of an integer
[英]Recursion question (Sum of odd numbers in array) in C
我对递归 function 有疑问。 该程序应该计算 n 个奇数的总和,关键是每次我们找到总和时,我们必须打印以下内容:
例如,如果用户给出 5 个数字 (5,4,3,2,1),则列表将是:
5 4 3 2 1
然后它将打印:
5[0](是) 4[5](是) 3[5](是) 2[8](否) 1[8](否)
首先,它打印数字,然后在 [] 中打印下一个奇数的总和,在括号的末尾,如果每个节点中的 number^2 大于它的下一个奇数。 就像第一个一样,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”……
这决定了递归 function 的行为方式。 它是先调用自己,还是最后调用自己? 在您的情况下,首先要处理头值,因此要在处理完数字后进行递归调用。 在最后。
那么你的测试if (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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.