新聞中心
C語言:遞歸函數(shù)的定義疑惑
都是通過棧來實現(xiàn)的,為了支持函數(shù)調(diào)用,編譯器必需要建棧.沒有棧的編譯器無法支持函數(shù)調(diào)用
10年積累的成都網(wǎng)站設計、成都網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有昌寧免費網(wǎng)站建設讓你可以放心的選擇與我們合作。
實際上編譯器無法區(qū)分是否是遞歸函數(shù),它只不過是按代碼順序執(zhí)行,到達return fib(n-1)+fib(n-2);時實際已經(jīng)經(jīng)過了int fib(int n),相當于編譯器已經(jīng)得知這個函數(shù)是存在的,所以沒有問題可以調(diào)用。
不管是不是遞歸函數(shù),函數(shù)入棧都是在編譯時完成的
c語言遞歸函數(shù)
遞歸具體用法其實就是讓你把一個問題分解成很多個類似的情況,雖然你要解決這個問題非常難,莫名其妙,要你想幾年,但是把他一直遞歸分解,就變成很好理解的單種情況,而你整個問題又是跟這個單種情況類似,把整個問題通過遞歸調(diào)用一層一層分解到最低級簡單的那種情況,就是你所需要理解的了。
一個函數(shù)在它的函數(shù)體內(nèi)調(diào)用它自身稱為遞歸調(diào)用。這種函數(shù)稱為遞歸函數(shù)。C語言允許函數(shù)的遞歸調(diào)用。在遞歸調(diào)用中,主調(diào)函數(shù)又是被調(diào)函數(shù)。執(zhí)行遞歸函數(shù)將反復調(diào)用其自身,每調(diào)用一次就進入新的一層。
(引自譚浩強的C語言書里)
用遞歸法計算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n1)
具體如下long ff(int n)
{
long f;
if(n0) printf("n0,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);
}
較難題:一塊板上有三根針,A,B,C。A針上套有64個大小不等的圓盤,大的在下,小的在上。如圖5.4所示。要把這64個圓盤從A針移動C針上,每次只能移動一個圓盤,移動可以借助B針進行。但在任何時候,任何針上的圓盤都必須保持大盤在下,小盤在上。求移動的步驟。
具體如下move(int n,int x,int y,int z)
{
if(n==1)
printf("%c--%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c--%c\n",x,z);
move(n-1,y,x,z);
}
}
main()
{
int h;
printf("\ninput number:\n");
scanf("%d",h);
printf("the step to moving %2d diskes:\n",h);
move(h,'a','b','c');
}
從程序中可以看出,move函數(shù)是一個遞歸函數(shù),它有四個形參n,x,y,z。n表示圓盤數(shù),x,y,z分別表示三根針。move 函數(shù)的功能是把x上的n個圓盤移動到z上。當n==1時,直接把x上的圓盤移至z上,輸出x→z。如n!=1則分為三步:遞歸調(diào)用move函數(shù),把n-1個圓盤從x移到y(tǒng);輸出x→z;遞歸調(diào)用move函數(shù),把n-1個圓盤從y移到z。在遞歸調(diào)用過程中n=n-1,故n的值逐次遞減,最后n=1時,終止遞歸,逐層返回。當n=4 時程序運行的結(jié)果為:
C語言遞歸函數(shù)
int?recursive_combination(int?n,int?r){
if(nr)return?0;
if(r==0||r==n)return?1;
if(r==1)return?n;
return?recursive_combination(n-1,r-1)+
recursive_combination(n-1,r);
}
C語言:定義遞歸函數(shù)求圖片中的數(shù)列前n項之和,n由鍵盤輸入,1~10;輸入錯誤提示并退出,咋編?
代碼文本:
#include "stdio.h"
double fun(int n){
int m,s;
for(s=1,m=n;m--;s*=10);
return n1 ? 9.0/(7*s-25)+fun(n-1) : 0.2;
}
int main(int argc,char *argv[]){
int n;
printf("Enter n(int 0n11)...\nn=");
if(scanf("%d",n)==1 n0 n11)
printf("S(%d) = %.10g\n",n,fun(n));
else
printf("Input error, exit...\n");
return 0;
}
網(wǎng)頁標題:定義遞歸函數(shù)c語言 函數(shù)的遞歸c語言
本文地址:http://www.dlmjj.cn/article/docdpei.html