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...