說明:如果您有任何疑問或想咨詢其他業務請撥打電話 400 685 0732
全網監測海量數據按需發布監測預警
實時把握輿情動態精準追溯信息源頭
遞歸調用是一種特殊的嵌套調用方式,這是一種解決方案,是一種邏輯思想,在網頁建設的過程當中也經常可以看見,可是遞歸調用究竟要怎么使用呢?接下來我們就一起來好好的了解一下吧。
遞歸調用——遞歸調用的定義
遞歸調用就是在當前的函數中調用當前的函數并傳給相應的參數,這是一個動作,這一動作是層層進行的,直到滿足一般情況的的時候,才停止遞歸調用,開始從最后一個遞歸調用返回。
fun(形參){
fun(參數值1)//第一次遞歸調用
fun(參數值2)//第二次遞歸調用
遞歸調用的使用方法
C語言中的遞歸
計算階乘的代碼
longfact(longn)
{
if(n==0||n==1)return1L;
elsereturnn*fact(n-1);
}
這個函數叫做fact,它自己調用自己,這個就是一個典型的遞歸調用,調用過程類似一個棧。
注:主調函數又是被調函數。執行遞歸函數將反復調用其自身。每調用一次就進入新的一層。
intf(intx)
{
inty;
z=f(y);
returnz;
}這個函數是一個遞歸函數。但是運行該函數將無休止地調用其自身,這當然是不正確的。為了防止遞歸調用無終止地進行,必須在函數內有終止遞歸調用的手段。常用的辦法是加條件判斷,滿足某種條件后就不再作遞歸調用,然后逐層返回。下面舉例說明遞歸調用的執行過程。
注:鏈表在某種程度上就是遞歸的調用.
Pascal中的遞歸
const
z=10000;
var
a:array[0..z+1]ofinteger;
n,j,i,k:longint;
begin
readln(n);write(n,’!=’);
begin
a[1]:=1;
fori:=1tondo
begin
forj:=1tozdo
a[j]:=a[j]*i;
fork:=1tozdo
begin
a[k+1]:=a[k+1]+a[k]div10;
a[k]:=a[k]mod10;
end;
end;
i:=z;k:=0;
repeat
ifa[i]<>0thenk:=1;
i:=i-1;
untilk=1;
k:=0;
forj:=i+1downto1do
write(a[j]);
end;
writeln;
end.
c++語言中的遞歸
#include
usingnamespacestd;
intfac(intn)
{
ints=1;
for(inti=n;i>0;i–)
{
if(s<=s*i)s=s*i;
else
{
cout<<“overintarea”<<ENDL;<p>
return0;
};
}
returns;
}
voidmain()
JA寫的遞歸調用
publicclassTestDg{
publicstaticvoidmain(String[]args){
System.out.println(method(5));
}
publicstaticintmethod(intn){
if(n==1)
return1;
else
returnn*method(n-1);
}
}
軟件遞歸調用里面最經典的一個案例
#include
intc=0;/*全局變量,搬動次數*/
voidmove(charx,intn,charz)
{/*第n個圓盤從塔座x搬到塔座z*/
printf(“第%i步:將%i號盤從%c移到%c\n”,++c,n,x,z);
}
voidhanoi(intn,charx,chary,charz)
{/*將塔座x上按直徑由小到大且自上而下編號為1至n的n個圓盤*/
/*按規則搬到塔座z上。y可用作輔助塔座*/
if(n==1)
move(x,1,z);/*將編號為1的圓盤從x移到z*/
else
{
hanoi(n-1,x,z,y);/*將x上編號為1至n-1的圓盤移到y,z作輔助塔*/
move(x,n,z);/*將編號為n的圓盤從x移到z*/
hanoi(n-1,y,x,z);/*將y上編號為1至n-1的圓盤移到z,x作輔助塔*/
}
}
voidmain()
{
intn;
printf(“3個塔座為a、b、c,圓盤最初在a座,借助b座移到c座。請輸入圓盤數:”);
scanf(“%d”,&n);
hanoi(n,’a’,’b’,’c’);
}
以上就是有關遞歸調用該如何使用的所有內容,當然在不同的語言編程當中會有不同的使用方法具體的還是要根據實際情況來編寫程序,如果大家還想了解更多與之有關的內容,歡迎關注我們文軍營銷的官網。
推薦閱讀
遞歸函數詳解 遞歸函數如何使用 | 文軍營銷一個含直接或間接調用本函數語句的函數被稱之為遞歸函數,在上面的例子中能夠看出,它必須滿足以下兩個條件: 1)在每一次調用自己時,必須是(在某種意義上)更接近于解; 2)必須有一個終止處理或計算的準則。 例如: 梵塔的遞歸函數 //C voidhanoi(intn,charx,chary,charz) { if(n==1) move(x,1,z); else...
說明:如果您有任何疑問或想咨詢其他業務請撥打電話 400 685 0732