遞歸c語言例題
Ⅰ c語言中自我遞歸的幾個例子
遞歸主要元素:入口,遞歸和結束。在定義遞歸函數時將這三個元素考慮進去就行;如:
double
callnext(int
n)
{
if(n>1)
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(n>1)
return
callnext(n-1)+3中的callnext(n-1);結束:else
return
1;整個執行流程:callnext(m)
調用
callnext(m-1);callnext(m-1)調用callnext(m-1-1)。。。
callnext(2)調用callnext(1);callnext(1)=1;結束;
Ⅱ c語言 函數遞歸調用的簡單例子
舉一個用遞歸調用函數求輸入非負整數的階乘的例子,如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intfact(intn){
if(n==1||n==0)return1;
elsereturnn*fact(n-1);
}
intmain(void){
intx;
while(1){
printf("Inputx(int12>=x>=0)... x=");
if(scanf("%d",&x),x>=0&&x<=12)//x>12時會使結果溢出
break;
printf("Error,redo:");
}
printf("%d!=%d ",x,fact(x));
return0;
}
Ⅲ C語言求一些關於遞歸的練習題
1、編寫遞歸函數求 1+2+3+……+n 的和;
2、編寫遞歸函數求 2*4*6*……*(2n) 的積;
3、編寫遞歸函數求 n 的階乘;
4、漢諾塔問題;
實際上很多問題都可以通過遞歸來實現,但是看到你的情況估計較難的你實現不了,所以給你幾個簡單的練習一下,這樣可以增強對遞歸的理解,等理解的較為深入後再做稍微難一些的。
Ⅳ c語言 遞歸的題目(求高人指點)
fun(int x)
{
printf("%d",x); //輸出x
if(x/2>0)
fun(x/2-2); //遞歸調用fun(x/2-2)
}
這樣就是20 8 2 -1
執行步驟
輸出20
執行f(8)
輸出8
執行f(2)
輸出2
執行f(-1)
輸出-1
條件不滿足
退出
fun(int x)
{if(x/2>0)
fun(x/2-2); //遞歸調用f(x/2-2)
printf("%d",x); //輸出x
}
執行步驟
調用f(20)未執行完
調用f(8)未執行完
調用f(2)未執行完
調用f(-1)
條件不滿足
輸出-1
f(-1)函數調用結束返回f(2)函數
輸出2
f(2)函數調用結束返回f(8)函數
輸出8
f(8)函數調用結束返回f(20)函數
輸出20
f(20)函數調用結束返回main函數
至於遞歸函數的編譯器實現方法就不詳細說了
像1L說的畫個圖其實方法蠻好的
Ⅳ c語言題:用遞歸法求20個階乘
#include"stdio.h"
doublejc(doublen)
{
if(n>1)
returnjc(n-1)*n;
else
return1;
}
intmain()
{
doublei;
for(i=0;i<=20;i++)
printf("%.0lf ",jc(i));
}
再給一個完全用遞歸的:
#include"stdio.h"
doublejc(doublem,doublen)
{
if(m>1)
{
if(n>1)
{
if(m==n)
printf("%.0lf ",jc(m,n-1)*n);
else
returnjc(m,n-1)*n;
}
else
{
if(m>0)
jc(m-1,m-1);
return1;
}
}
else
{
printf("1 ");
}
}
intmain()
{
doubles[20],m;
m=20;
jc(m,m);
}
Ⅵ 關於c語言遞歸調用的經典例題,求跪大神詳解 !
這是漢諾塔吧。
原理:(總共n個盤子)
1、將第一個位置(起始位置)上的n-1個盤子移到第二個位置上,此時第一個位置只剩第n個盤子
2、將第一個位置上的最後一個盤子(第n個盤子)移到第三個位置(目標位置)上,再將第二個位置上的n-1個盤子移到第三個位置上。
你不需要曉得n-1個盤子如何從一個位置移到另一個位置,讓程序做。n-->n-1-->n-2......1,問題不斷的小化,當n=1時,直接從第一個位置移到第三個位置,再倒過來推1-->2-->3......-->n。最終問題就會被解決。
hanoi()函數就是將問題小化,使n-->1
move()函數中char x是起始位置,char y是目標位置,即x-->y.用A、B、C來顯示盤子是如何移動的