C語言項(xiàng)目爬樓梯的兩種實(shí)現(xià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 <stdio.h>
#include <stdlib.h>
int main()
{
int fib(int a,int b,int n);
int n;
scanf("%d",&n);
printf("%d",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é)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
Qt實(shí)現(xiàn)網(wǎng)絡(luò)聊天室的示例代碼
本文主要介紹了Qt實(shí)現(xiàn)網(wǎng)絡(luò)聊天室,實(shí)現(xiàn)一個(gè)在線聊天室, 使用tcp對(duì)客戶端和服務(wù)器端進(jìn)行通訊。具有一定的參考價(jià)值,具有一定的參考價(jià)值,2021-06-06
C/C++使用API實(shí)現(xiàn)數(shù)據(jù)的壓縮與解壓縮
在Windows編程中,經(jīng)常會(huì)遇到需要對(duì)數(shù)據(jù)進(jìn)行壓縮和解壓縮的情況,本文將深入探討使用Windows API進(jìn)行數(shù)據(jù)壓縮與解壓縮的過程,感興趣的小伙伴可以了解下2023-11-11
C++數(shù)據(jù)結(jié)構(gòu)關(guān)于棧迷宮求解示例
這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的迷宮求解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-11-11
vector, list, map在遍歷時(shí)刪除符合條件的元素實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄獀ector, list, map在遍歷時(shí)刪除符合條件的元素實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12

