2015-05-16 81 views
0

我寫了這個遞歸函數來計算序列的條款:遞歸函數崩潰

enter image description here

並且將它們放置在最高1000元的float array,但是這個功能崩潰的我運行並輸入float A,但我沒有看到那裏有什麼問題。

#include<stdio.h> 
    #include<math.h> 

    void triple_root(float B[1000],int i,float A,float b,float c){ 
     float x; 
     x = 0.333*((A/(b*b))+(1/c)); 
     B[i] = x; 

     if(fabs(x-b)<=0.00001|| i==999) 
      puts(" "); 
     else triple_root(B,i+1,A,x,b); 
    } 

    int main(){ 
     float A[1000],b; 
     int i; 

     scanf("%f",&b); 
     triple_root(A,0,b,1,1); 

     for(i=0;i<1000;i++){ 
      printf("%f\n",A[i]); 
     } 
     getchar(); 
    } 

P.S .:整數i初始值是0,並且兩個浮點數bc初始值爲1

+0

你的'main'在哪裏? – Sebivor

+0

我只需要爲我的函數提示,即時通過 –

+0

即時通訊問題,因爲它沒有編譯,因爲它缺少'main'入口點,這就是它將要關閉的原因。或者詢問有關在嘗試編譯此代碼時發生的錯誤消息,而不使用「main」入口點或添加「main」入口點的問題。 – Sebivor

回答

2

沒有明確測試,以低於1000確保i撐;你的代碼假定遞歸會在這種情況發生之前停止,但我沒有看到任何事情可以保證這一點。

+0

我補充說,如果我在停止條件1000 =功能停止,但沒有做的工作,任何更多的幫助? –

+0

1.我們看不到這一點,2.如果你使用賦值操作符,不,這不會「做這項工作」... – Sebivor

+0

我編輯我的帖子,我是對的嗎? –

1

即使您使用了最新的編輯功能,代碼也無法爲我編譯。您可能正在運行破損的二進制文件。不過不用擔心!我設法修復它。

  1. 刪除<conio.h>包括。你很少需要這個非標準的頭文件。將getch更改爲getchar
  2. 更改void mainint mainmain返回int,而不是void

Viola! http://ideone.com/zeAuP1

+0

謝謝,但我不明白爲什麼它沒有工作與我以前的語法和圖書館,即conio一:/我看着結果,一切看起來不錯 –