C 函式遞迴問題,C 用函式遞迴求1 2 到n的問題

時間 2021-10-14 22:40:20

1樓:匿名使用者

const int len = 66;

const int divs = 6;

void subdivide(char ar,int low,int high,int level);

int _tmain(int argc, _tchar* ar**)

return 0;

}//將陣列ar子分,並在子分構成中不斷在子分的子串中間賦值為‘|’

//子分過程:先賦值當前串中間值為‘|’,再子分前半部分,子分後半部分,

//其中level可以認為是子分遞迴的次數

void subdivide(char ar,int low,int high,int level)

至於遞迴過程,你可以畫一顆遞迴樹就可以了。這一點,你可以去看看有關資料結構方面的書。只有真正的用棧來思考遞迴問題了(其實計算機底層就是利用棧來實現遞迴的,當然這是在你思考其過程的時候,在設計程式時候直接思考就行了,不必想到棧),你就真正的搞明白了。

2樓:

給你個簡單的例子吧!建議去看看書上關於遞迴呼叫的部分。

【例8.5】用遞迴法計算n!

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

n!=1 (n=0,1)

n×(n-1)! (n>1)

按公式可程式設計如下:

譚浩強 c 語言程式設計 2001 年 5 月 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。

3樓:匿名使用者

這裡遞迴的意識是類似2分法的,一直在中間元素變為‘|‘;然後再依次在左邊和右邊 按這個遞迴,此時lenth 執行依次-1;到執行到lenth=0;遞迴結束,

這樣一直換,

跟樹的遞迴很多一樣

4樓:匿名使用者

你理解函式的棧楨麼?如果不理解的話去搜一下,弄懂一個函式是怎麼執行的,遞迴無非就是一個函式呼叫自己而已。

樓梯知道吧。就拿樓梯舉例子。比如2層樓,函式呼叫好比爬樓梯。

每一次函式呼叫好比是一層樓!你第一次爬樓梯,爬到一定高度,這時你有要遞迴呼叫自己了,你就把你現在的地方記住比如a1吧,而後你就穿越到2樓了又開始爬樓梯,再多樓層也是一定的道理。現在爬到最高了要下樓,也是遞迴呼叫到最深一層了。

下樓的時候,你就跳著下樓了,跳到a1(多層是an,一層一層下)然後逐了樓梯下來,一直到樓下。函式呼叫完成。

c++用函式遞迴求1+2+到n的問題

5樓:匿名使用者

進入一層遞迴,相當於進入一個新的空間,內部運算的結果只對內部負責,對外返回一個對外的值

sum(3)的求解基於sum(2)的值,但不要把這裡的3和2放到一個空間下去判斷,這樣會越來越糊塗

sum(3)=3+sum(2)這也是我們學習數學的概念吧,當求出sum(2)時,你也同樣不要考慮他和sum(1)和sum(0)的關係,只要

利用sum(2)的結果就可以了。

6樓:匿名使用者

其實這裡定義了t是多餘的。

這個函式可以這樣寫:

int sum(int n)

其實遞迴呼叫是這樣的。如n=3,第一次呼叫sum(n),n>=1 所以執行return n+sum(n-1),在函式返回之前,先會計算sum(n-1)……最後sum(0)=0,然後再一層一層的返回。最後會返回5了。

7樓:紅燒牛肉

你上面說t(6)=n(6)+n(0);我搞不懂,t,n不是函式,怎麼能這麼表示呢?

n和t都是sum()函式的區域性變數。要注意的是每一層的sum()的n和t都不一樣。當執行到t=n+sum(n-1)時,函式呼叫上一層sum()函式。

上一層函式的n等於剛才的函式中的n-1,就是形參複製實參,而這兩個變數名可以相同,也可以不相同,無所謂的。

而在本函式中呼叫的n當然是本形參中的n,即使有一個全域性變數也是n,這時也會被遮蔽。

至於為什麼以0為結束點,這個完全是可以的,當然,以1為結束點也可以。那就這樣寫:

int sum(int n)

結果應該是一樣的。現在想想如果以0為結束點的話。

不過是此基礎上最後多加了個0,這不影響結果的。

8樓:

因為sum函式裡有個判斷 if(n<1) t=0;,這在呼叫sum(1)時,就有t=1+sum(1-1),因為,1-1=0,這時,就返回t=0;。

c語言遞迴求階乘,c語言怎麼用遞迴呼叫函式的方法求n的階乘?

問明 舉例 用遞迴方法求n include int main int n int y printf input a integer number scanf d n y fac n printf d d n n,y return 0 int fac int n int f if n 0 printf...

C語言怎麼用遞迴法求階乘,c語言怎麼用遞迴呼叫函式的方法求n的階乘?

辜亭晚示未 n的階乘,就是從1開始乘到n,即1 2 3 n 1 n。即n 1 2 3 n 1 n。而 n 1 1 2 3 n 1 所以可以得出,n n 1 n。由這個概念,可以得出遞迴求階乘函式fact的演算法 1如果傳入引數為0或1,返回1 2對於任意的n,返回n fact n 1 如下 int ...

C 爬樓梯,遞迴函式的使用,C 爬樓梯問題

華師 1 首先我們建立一個函式,判斷函式的合法性 cpp view plaincopy void jump ladder int layer,int stack,int top 2 判斷當前的層數是為1或者是否為2 cpp view plaincopy void jump ladder int la...