當前位置:編程學習大全網 - 編程語言 - C++編程:用遞歸函數求n!,其中n從鍵盤輸入。

C++編程:用遞歸函數求n!,其中n從鍵盤輸入。

壹個函數在它的函數體內調用它自身稱為遞歸調用。這種函數稱為遞歸函數。C語言允許函數的遞歸調用。在遞歸調用中,主調函數又是被調函數。執行遞歸函數將反復調用其自身,每調用壹次就進入新的壹層。

例如有函數f如下:

int

f(int

x)

{

int

y;

z=f(y);

return

z;

}

這個函數是壹個遞歸函數。但是運行該函數將無休止地調用其自身,這當然是不正確的。為了防止遞歸調用無終止地進行,必須在函數內有終止遞歸調用的手段。常用的辦法是加條件判斷,滿足某種條件後就不再作遞歸調用,然後逐層返回。下面舉例說明遞歸調用的執行過程。

例用遞歸法計算n!

用遞歸法計算n!可用下述公式表示:

n!=1

(n=0,1)

n×(n-1)!

(n>1)

按公式可編程如下:

long

ff(int

n)

{

long

f;

if(n<0)

printf("n<0,input

error");

else

if(n==0||n==1)

f=1;

else

f=ff(n-1)*n;

return(f);

}

main()

{

int

n;

long

y;

printf("\ninput

a

inteager

number:\n");

scanf("%d",&n);

y=ff(n);

printf("%d!=%ld",n,y);

}

程序中給出的函數ff是壹個遞歸函數。主函數調用ff

後即進入函數ff執行,如果n<0,n==0或n=1時都將結束函數的執行,否則就遞歸調用ff函數自身。由於每次遞歸調用的實參為n-1,即把n-1的值賦予形參n,最後當n-1的值為1時再作遞歸調用,形參n的值也為1,將使遞歸終止。然後可逐層退回。

下面我們再舉例說明該過程。設執行本程序時輸入為5,即求5!。在主函數中的調用語句即為y=ff(5),進入ff函數後,由於n=5,不等於0或1,故應執行f=ff(n-1)*n,即f=ff(5-1)*5。該語句對ff作遞歸調用即ff(4)。

進行四次遞歸調用後,ff函數形參取得的值變為1,故不再繼續遞歸調用而開始逐層返回主調函數。ff(1)的函數返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值為6*4=24,最後返回值ff(5)為24*5=120。

  • 上一篇:【建築自動化技術論文】智能建築自動化技術
  • 下一篇:英國留學,想學IT專業!能推薦幾所大學供參考嗎,最好詳細點,謝謝!本人211大學,是要去英國讀研的!
  • copyright 2024編程學習大全網