簡體   English   中英

對C語言的代碼片段應用尾遞歸嗎?

[英]Apply Tail Recursion for the piece of code in C language?

下面是一段代碼,它使用遞歸來查找數組中數字的乘積,但是我沒有得到如何遞歸地做同樣的尾巴的任何建議?

  int Product(int a[], int i, int n) 
   {
    return (i >= n) ? 1 : a[i] * Product(a, i + 1, n);
   }

在當前形式下,您的代碼不是尾部遞歸。 遞歸調用必須是函數中的最后一條指令,並且在您的代碼中,乘法發生在遞歸調用之后。 因此,您必須更改簽名以使用一個累加器,該累加器將保存到目前為止的數字乘積:

int Product(int a[], int i, int n, int acc) 
{
   return (i >= n) ? 1 : Product(a, i + 1, n, a[i] * acc);
}

對於初始調用,您應傳遞1作為累加器值。 由於尾部遞歸形式使用起來不太方便,因此您可以將函數分為助手函數和實際實現中的另一個函數:

int Product(int a[], int i, int n)
{
    return TailProduct(a, i, n, 1);
}

int TailProduct(int a[], int i, int n, int acc) 
{
   return (i >= n) ? 1 : Product(a, i + 1, n, a[i] * acc);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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