遞歸主要元素:入口,遞歸和結(jié)束。在定義遞歸函數(shù)時將這三個元素考慮進去就行;如: double callnext(int n)
成都創(chuàng)新互聯(lián)是一家以網(wǎng)絡(luò)技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護、成都網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站備案、服務(wù)器租用、主機域名、軟件開發(fā)、成都微信小程序等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務(wù),是一家有著豐富的互聯(lián)網(wǎng)運營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務(wù)窗口:建站歡迎來電:18982081108
{
if(n1) return callnext(n-1)+3;
else return 1;
}
int main()
{
int m;
scanf("%d",m);
printf("result=%f",callnext(m));
return 0;
}
入口:callnext(m);遞歸:if(n1) return callnext(n-1)+3中的callnext(n-1);結(jié)束:else return 1;整個執(zhí)行流程:callnext(m) 調(diào)用 callnext(m-1);callnext(m-1)調(diào)用callnext(m-1-1)。。。
callnext(2)調(diào)用callnext(1);callnext(1)=1;結(jié)束;
舉一個用遞歸調(diào)用函數(shù)求輸入非負整數(shù)的階乘的例子,如下:
//#include?"stdafx.h"http://If?the?vc++6.0,?with?this?line.
#include?"stdio.h"
int?fact(int?n){
if(n==1?||?n==0)?return?1;
else?return?n*fact(n-1);
}
int?main(void){
int?x;
while(1){
printf("Input?x(int?12=x=0)...\nx=");
if(scanf("%d",x),x=0??x=12)//x12時會使結(jié)果溢出
break;
printf("Error,redo:?");
}
printf("%d!?=?%d\n",x,fact(x));
return?0;
}
遞歸函數(shù)有三點要求:
1,遞歸的終止點,即遞歸函數(shù)的出口
2,不斷的遞歸調(diào)用自身
3,遞歸函數(shù)主體內(nèi)容,即遞歸函數(shù)需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根據(jù)不同的需要合并,比如,有時候遞歸函數(shù)的主體就是返回調(diào)用下層函數(shù)所得到的結(jié)果。
具體例子如下:
void?fun(int?n)
{
if(n=0)?return;???//1?這是遞歸的終點,即出口
fun(n-1);????????//2、遞歸函數(shù)自身的調(diào)用
coutnendl;?????//3?遞歸函數(shù)的主體內(nèi)容
}
2,3合并的情況
int?fun(int?n)
{
if(n=0)?return?0;
return?fun(n-1)+fun(n-2);??//2?3合并
}