舉一個用遞歸調(diào)用函數(shù)求輸入非負(fù)整數(shù)的階乘的例子,如下:
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比桃源網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式桃源網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋桃源地區(qū)。費用合理售后完善,十載實體公司更值得信賴。
//#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ù):
recursion(int x,int y)
{
if(y-1 == x)return x;
else return x+recursion(x+1);
}
使用的時候用另個函數(shù)調(diào)用。
這是漢諾塔吧。
原理:(總共n個盤子)
1、將第一個位置(起始位置)上的n-1個盤子移到第二個位置上,此時第一個位置只剩第n個盤子
2、將第一個位置上的最后一個盤子(第n個盤子)移到第三個位置(目標(biāo)位置)上,再將第二個位置上的n-1個盤子移到第三個位置上。
你不需要曉得n-1個盤子如何從一個位置移到另一個位置,讓程序做。n--n-1--n-2......1,問題不斷的小化,當(dāng)n=1時,直接從第一個位置移到第三個位置,再倒過來推1--2--3......--n。最終問題就會被解決。
hanoi()函數(shù)就是將問題小化,使n--1
move()函數(shù)中char x是起始位置,char y是目標(biāo)位置,即x--y.用A、B、C來顯示盤子是如何移動的
1、編寫遞歸函數(shù)求 1+2+3+……+n 的和;
2、編寫遞歸函數(shù)求 2*4*6*……*(2n) 的積;
3、編寫遞歸函數(shù)求 n 的階乘;
4、漢諾塔問題;
實際上很多問題都可以通過遞歸來實現(xiàn),但是看到你的情況估計較難的你實現(xiàn)不了,所以給你幾個簡單的練習(xí)一下,這樣可以增強(qiáng)對遞歸的理解,等理解的較為深入后再做稍微難一些的。