2011-06-17 55 views
0

所以我寫了這個簡單的遞歸程序,當我用GCCC程序設計:遞歸

error: lvalue required as left operand of assignment

編譯它正在一個錯誤希望這個心不是什麼嚴重的,任何見解表示讚賞

的感謝!

#include <stdio.h> 
int factorial (int); 

int main (void) 


{ 

     int i = 0; 
     int a = 0; 

     printf("Please enter an integer: "); 
     scanf("%d", &i); 

     a = factorial (i); 

     printf("\n\n%d factorial equals: %d \n", i, a); 

     return 0; 
} 

int factorial (int n) 
     { 
     if (n <= 0) 
       return 0 ; 
     else 
       f(n) = f(n-1) + 2;    
     } 

回答

6

下面的語句是無效C:

  f(n) = f(n-1) + 2;    

(我想這是你得到了錯誤的行,你不說)

你可能想嘗試以下:

  return factorial(n-1) + 2; 

但隨後的名字factorial是誤導,因爲那是不是factorial function的正確公式。

+0

是的,這是行! – Jennifer 2011-06-17 03:20:23

3

你爲什麼寫這

f(n) = f(n-1) + 2; 

我不能看到一個名爲f()任何功能。
這不是任何數字的計算階乘的正確公式。看看Greg提供的鏈接。在階乘函數

它更改爲

int factorial (int n) 
    { 
    if (n==1||n==0) 
      return 1; 
    else 
      return n*factorial(n-1);    
    } 
+0

最好用描述來描述你不能爲返回值賦值;主要是左值不能是函數執行。 – Suroot 2011-06-17 03:32:43

+0

給出瞭解決方案,但如果(n <= 1)可能會更好地防止致命錯誤,如果n是負數。 – thelionroars1337 2011-06-17 09:09:15

0

該錯誤是使用f(N)= F(N + 1)。括號中的任何內容都是c中的函數,並且函數不能賦值。你可能想要n =階乘(n + 1);

+0

它會編譯但不會給因式...事實上,這將是一個遞歸調用,這將是'無限'(直到內存耗盡)。 – thelionroars1337 2011-06-17 08:16:40

0

代替f(n)= f(n-1)+2;與

return n*factorial(n-1) 

是的,0!是一個,這樣添加

if(n==0) return 1; 
+0

a未在該功能的範圍內定義。 – thelionroars1337 2011-06-17 09:14:38

+0

我的壞,是一個錯字 – 2011-06-17 15:04:30

+0

這一切都在兜帽哥們 – thelionroars1337 2011-06-17 18:09:29

0

賦值操作符=需要可變在左手側,向其中在右手側的值被分配給。你不能把某些東西分配給一個函數,這就是f(n)是根據C語法的。這是給代碼行分配一個值,這是沒有意義的。在函數的左邊唯一有意義的是,它可以存儲值

雖然函數可以放在賦值的右邊,只要它們返回一些東西(它們不是void類型)。

爲了得到正確的因子,您需要多考慮一點......首先請記住,您希望最後一個值爲1,而不是零。並且階乘中的所有數字都是相乘的。