有一程序int fact(){ static int i=5; if(i=0) { return(i); } else { i=i-1; return((i+abs(1))*fact()); }}main(){ printf("factor of 5=%d\n", fact());}運行得不到結果,請問是怎么回事?

熱心網友

如果你只是將你原本的程序的if(i=0)改為if(i==0),則結果的確是0。原因是fact()中當i==0時返回i,即0,而回到遞歸的上一層時,又返回(i+abs(1))*fact(),0乘以任何數為0,這樣一直回溯,最后結果當然為0。另外,fact()中的i存儲類型為static(靜態),即i在fact()中只分配一次內存,每次遞歸引用的都是同一個i,當遞減到i==0時,回到上一層,此時i的值保持為0,并非遞歸前的值。這樣也達不到求階乘的目的。所以,這是個不倫不類的遞歸算階乘程序。

熱心網友

使用遞歸算階乘的程序好象是這樣的:#include "iostream.h"int fact(int i){ if(i < 0 ) return 0; if (i == 0) return 1; if (i == 1) return 1; return i * fact(i - 1);}main(){ cout << fact(0) <

熱心網友

你犯了一個小小的錯誤,在你的if語句中不應該是if(i=0)而應該是if(i==0)這樣就會有結果了,呵呵,祝你好運!!!