溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語言項(xiàng)目爬樓梯的兩種實(shí)現(xiàn)方法參考

發(fā)布時(shí)間:2020-08-31 13:41:49 來源:腳本之家 閱讀:478 作者:迂者-賀利堅(jiān) 欄目:編程語言

【項(xiàng)目-爬樓梯】

樓梯有n階臺(tái)階,上樓可以一步上1階,也可以一步上2階,編一程序計(jì)算共有多少種不同的走法?

【參考解答(遞歸法)】

基礎(chǔ):樓梯有一個(gè)臺(tái)階,只有一種走法(一步登上去);兩個(gè)臺(tái)階,有2種走法(一步上去,或分兩次上去);

遞推:有n個(gè)臺(tái)階時(shí),設(shè)有count(n)種走法,最后一步走1個(gè)臺(tái)階,有count(n-1)種走法;最后一步走2個(gè)臺(tái)階,有count(n-2)種走法。于是count(n)=count(n-1)+count(n-2)。

可見,此問題的數(shù)學(xué)模型竟然是斐波那契數(shù)。

#include<stdio.h>
int main()
{
 unsigned long count(int n);
 int n;
 unsigned long m;
 printf("請(qǐng)輸入樓梯的階數(shù):");
 scanf("%d",&n);
 m=count(n);
 printf("有%lu種爬樓梯的方法\n",m);
 return 0;
}
unsigned long count (int n)
{
 unsigned long f;
 if(n==1)
  f=1;
 else if(n==2)
  f=2;
 else
  f=count(n-1)+count(n-2);
 return(f);
}

遞歸思路清晰,但卻“成本”高。另一個(gè)方法,在完成問題建模之后,采用了一種很巧妙的“非常規(guī)”的做法,將運(yùn)算量減少了一半。

//計(jì)163-1姜淇瀚
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
int main()
{
 int fib(int a,int b,int n);
 int n;
 scanf(&quot;%d&quot;,&amp;n);
 printf(&quot;%d&quot;,fib(0,1,n));
 return 0;
}
int fib(int a,int b,int n)
{
 if(n==3)
 {
  return a+b;
 }
  return fib(b,a+b,n-1);
}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI