簡體   English   中英

程序 C 遞歸(數組中奇數的和) integer 的平方問題

[英]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 可以用來處理空列表。 如果ptrNULL ,只需返回傳入的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM