[英]Program C Recursion (Sum of odd numbers in array) Problem with the square of an integer
我對遞歸 function 有疑問。 該程序應該計算 n 個奇數的總和,關鍵是每次我們找到總和時,我們必須打印以下內容:
我需要幫助打印每個節點的正方形:
例如:如果用戶給出 5 個數字(1、2、3、4、5),則列表將是:
1 2 3 4 5
然后它將打印:
5[0](是) 4[5](是) 3[5](是) 2[8](否) 1[8](否)
首先,它打印數字,然后在 [] 中打印下一個奇數的總和,在括號的末尾,如果每個節點中的 number^2 大於它的下一個奇數。 就像第一個一樣,5>0,所以它是肯定的。
我已經寫到這里了,但是我不能打印它,有什么遺漏嗎?
int checkSumOfOdds(struct list *ptr, int sum) {
int square;
int isodd = ptr->value & 1;
square = [(struct list *) ptr->next] * [(struct list *) ptr->next];
if (isodd) sum += ptr->value;
printf("%d[%d](%s) ", ptr->value, sum, square>isodd ? "Yes":"No");
return ptr->next ? checkSumOfOdds(ptr->next, sum) : sum;
}
值的平方很簡單:
square = ptr->value * ptr->value;
比較square>isodd
應該是square>sum
。
由於需要遞歸調用來確定總和,並且需要打印總和,因此遞歸調用需要在printf
調用之前完成。
無需將當前sum
值作為參數傳遞。 如果需要將奇數添加到總和中,可以在遞歸調用之后完成。
由於打印的sum
不應包括當前值(如果奇數),當前值(如果奇數)應在printf
調用之后添加到總和。
function 可以用來處理空列表。 如果ptr
是NULL
,只需返回傳入的sum
值而不打印任何內容。 由於不需要傳入sum
值,它可以只返回 0 而不打印任何內容。
如上所述處理空列表也消除了在決定是否遞歸之前檢查ptr->next
的需要。
這是一個示例實現:
int checkSumOfOdds(struct list *ptr) {
int sum;
int square;
int isodd;
if (ptr == NULL) {
return 0;
}
sum = checkSumOfInts(ptr->next);
square = ptr->value * ptr->value;
printf("%d[%d](%s) ", ptr->value, sum, square > sum ? "Yes" : "No");
isodd = ptr->value & 1;
if (isodd) {
sum += ptr->value;
}
return sum;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.