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語言編寫遞迴函式
遞迴函式 程式語言中,函式func type a,直接或間接呼叫函式本身,則該函式稱為遞迴函式。遞迴函式不能定義為行內函數。在數學上,關於遞迴函式的定義如下 對於某一函式f x 其定義域是集合a,那麼若對於a集合中的某一個值x0,其函式值f x0 由f f x0 決定,那麼就稱f x 為遞迴函式。函...
C 的遞迴函式問題
假設s裡有個兩字元吧,當第一次呼叫reverse s 時,判斷 s是否為空,即s裡的第一個字元是否存在,如果有的話,就呼叫reverse s 1 即對s裡的第二個字元進行判斷。不為空,就再呼叫,對下一個進行判斷,因為s裡只有兩個字元,所以在第三次呼叫時,直接返回。返回到reverse s 1 中,之...