liuxing167756 所說是正解:(本質(zhì)就是計算斐波那契數(shù)列)

從事資陽服務器托管,服務器租用,云主機,網(wǎng)絡空間,域名注冊,CDN,網(wǎng)絡代維等服務。
fun 這個無返回值函數(shù)需要依靠 f1 ,f2 兩局部變量用來傳遞每一次調(diào)用的結(jié)果地址(局部變量在堆棧中),每次調(diào)用都會不一樣。最后的返回值是靠*S來傳送的。這種用法在返回值很多時常用。多值可以用數(shù)組指針,可以用結(jié)構(gòu)指針。之所以這樣用 因為 fun(n) = fun(n-1) + fun(n-2) 對推公式中需要兩個不同的返回值!更簡單的公式如:fun(x)=fun(x-1)+5 可以直接用帶返回值得函數(shù)遞歸形式。任何遞推公式都可以用遞歸實現(xiàn),遞歸轉(zhuǎn)遞推就不一定了。遞歸的優(yōu)點是形式簡單執(zhí)行效率低,內(nèi)存資源消耗大。
根據(jù)題意是:
fun(0) = 1;
fun(1) = 1;
fun(n) = fun(n-1) + fun(n-2).
就是斐波那契數(shù)列
n 0 1 2 3 4 5 6
x 1 1 2 3 5 8 13
由于是遞歸調(diào)用,所以,程序在打印結(jié)果的時候是從最內(nèi)層函數(shù)開始打印,于是,就得到136.因為遞歸調(diào)用其實是嵌套調(diào)用,只是嵌套的是函數(shù)自身。這樣,需要將最內(nèi)層的函數(shù)執(zhí)行完畢,才開始執(zhí)行外層的,一層一層往外執(zhí)行完畢,最后是main函數(shù)。若將遞歸還原為順序程序,流程是這樣:樓主得到的631其實是從6開始被存放到某堆棧中的,這樣,1便成為最頂上的數(shù),而6成為最底部的數(shù)。而最后打印的時候,需要彈棧,出棧順序為:自頂向下出棧,于是,得到的結(jié)果為136樓主的解題過程是對的,但可能沒理解遞歸的意義。建議樓主翻閱關(guān)于遞歸的相關(guān)文章看看。
舉一個用遞歸調(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;
}
這是漢諾塔吧。
原理:(總共n個盤子)
1、將第一個位置(起始位置)上的n-1個盤子移到第二個位置上,此時第一個位置只剩第n個盤子
2、將第一個位置上的最后一個盤子(第n個盤子)移到第三個位置(目標位置)上,再將第二個位置上的n-1個盤子移到第三個位置上。
你不需要曉得n-1個盤子如何從一個位置移到另一個位置,讓程序做。n--n-1--n-2......1,問題不斷的小化,當n=1時,直接從第一個位置移到第三個位置,再倒過來推1--2--3......--n。最終問題就會被解決。
hanoi()函數(shù)就是將問題小化,使n--1
move()函數(shù)中char x是起始位置,char y是目標位置,即x--y.用A、B、C來顯示盤子是如何移動的
網(wǎng)站欄目:c語言函數(shù)的遞歸調(diào)用習題,c程序中各函數(shù)之間既允許直接遞歸調(diào)用
網(wǎng)站地址:http://chinadenli.net/article1/dsgsiid.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、定制網(wǎng)站、外貿(mào)建站、企業(yè)建站、網(wǎng)站設計、營銷型網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)