2011-06-02 43 views
0

嘿傢伙!我被分配了這個程序,它非常簡單,並且不需要很長時間就可以編寫代碼,但我無法運行它。沒有打印,我認爲這是因爲它進入了一個無限循環。只是尋找解決這個問題。家庭作業-C編程 - 遞歸程序

分配:

編寫和測試一個遞歸函數 ,返回 值以下遞歸定義:

f(x) = 0  if x <= 0 
f(x- 1) + 2  otherwise 

我的程序:

#include <stdio.h> 
int main(void) 
{ 
    int n, x; 

    int factorial(int n) { 

     if (x <= 0) { 
      printf("x equals: "); 
      return 1; 
     } else { 
      return n * factorial(n - 1); //error here 
     } 
     f(x) = f(x - 1) + 2; 
    } 
    return 0; 
} 
+4

這是一個竅門。它涉及到縮進代碼,以使'{'和'}'內的項目前面有四(4)個額外的空格。如果您正確縮進代碼,則可能會看到您創建的一些問題。 – 2011-06-02 01:50:15

+0

在適當的地方隨處添加printf並嘗試調試。嗯,將階乘移動到一個單獨的方法將是一個很好的起點。 – CharithJ 2011-06-02 01:54:42

+0

或者完全刪除階乘,因爲它從未實際使用過。 – trutheality 2011-06-02 01:56:16

回答

1

你已經定義了在主要內的階乘函數是不可能的。將它的定義從main()中分離出來,並從main()中調用它。

希望這個工程。首先糾正這一點,然後只能做一些事情。

2

我看到這個不正確嗎? 爲什麼有一個

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

在你的int因子函數中?

+0

即將發表相同的評論。程序中是否有任何名爲f()的函數?特別是,這是完整的代碼還是其中的一部分? – afaolek 2011-06-02 02:02:59

1
  1. 你已經在main中聲明瞭factorial。

  2. 你不主要調用階乘。

1

你想是這樣的:

int factorial(int n) { 
    //calculate the factorial 
    return result; 
} 

int main() { 
    int result = factorial(10); // Calculate 10! 
    printf("10! is %d", result); 
} 

附:感謝您對作業的誠實態度!

-1

我認爲這是你需要的。 #include int f(int x);

int main(void){ 
    int result = f(x); 
    printf("10! is %d", result); 
    return 0; 
} 

int f(int x) { 
    if (x <= 0) return 0; 
    return x*f(x-1)+2; // No more error here. This is where recursion begins 
} 

順便說一句,這不是一個階乘函數。

+0

這不是分配的正確實施。 – user505255 2011-06-02 02:36:12

+0

沒有-1從我:)但是,「更少更多」往往持有的家庭作業標記的問題。 – 2011-06-02 02:37:24

2

該代碼不應按原樣編譯。你不能在C中定義另一個函數,所以你需要在main()之外創建另一個函數,然後調用它。

我建議您完全移除factorial()函數,因爲它看起來與此作業不相關。

程序的基本結構應該是:

#include <stdio.h> 

int f(int x) 
{ 
    //definition of recursive function 
} 

int main(void) 
{ 
    //call to recursive function 
    return 0; 
} 

分配給你的遞歸函數的定義;你只需要把它翻譯成C.

0

你被要求執行f(x)定義爲:

f(x) = 0    if x <= 0 
     f(x-1) + 2  otherwise 

所以,首先,忘掉階乘,我猜你抓着它作爲例子或遞歸函數,但是這ISN」你在這裏被要求做什麼。

您需要實現的功能f,和實施應該是這樣的:

int f(int x) { 
    if(x <= 0){ 
     return /*something*/; 
    }else{ 
     return /*something else*/; 
    } 
} 

從閱讀的,你給f(x)的定義,你可以計算出/*something*//*something else*/應該是什麼。

然後,你被要求「測試」你的實現。你這樣做,通過看到的值從main功能f回報這將是這樣的:

int main(void){ 

    printf("f(1) is %d\n", f(1)); 
    printf("f(13) is %d\n", f(13)); 
    /* .. more tests here if you want .. */ 

    return 0; 
} 
0
  • 您已經定義裏面主要功能factorial()功能。這是允許的而不是。你需要把整個功能放在主體之外。
  • 您已完成f(x) = f(x - 1) + 2;。這裏你有一個不正確的賦值左側的功能。我也不明白這種嘗試的原因是什麼。

,你需要對計算機的遞歸函數的代碼是:

#include <stdio.h> 

int main (void) 
{ 
    int x, y; 
    printf ("\nEnter x: "); 
    scanf ("%d", &x); 
    y = f (x); 
    printf ("\n%d\n", y); 
    return 0; 
} 

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

我不明白爲什麼階乘函數進了你的方式。可能你可能想修改它並執行給定的問題。

0
#include<stdio.h> 
int fun(float i){ 
int p; 
if(i<=0){ 
return 0; 
} 
else{ 
i-=1; 
p=fun(i)+2; 
} 
return p; 
} 
void main(){ 
float i; 
printf("Enter the number: "); 
scanf("%f",&i); 
printf("\nThe output is %d",fun(i)); 
} 

檢查了這一點。