C語言項(xiàng)目爬樓梯的兩種實(shí)現(xiàn)方法參考
【項(xiàng)目-爬樓梯】
樓梯有n階臺階,上樓可以一步上1階,也可以一步上2階,編一程序計(jì)算共有多少種不同的走法?
【參考解答(遞歸法)】
基礎(chǔ):樓梯有一個(gè)臺階,只有一種走法(一步登上去);兩個(gè)臺階,有2種走法(一步上去,或分兩次上去);
遞推:有n個(gè)臺階時(shí),設(shè)有count(n)種走法,最后一步走1個(gè)臺階,有count(n-1)種走法;最后一步走2個(gè)臺階,有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("請輸入樓梯的階數(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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
C++開發(fā)之PugiXML庫基礎(chǔ)用法示例詳解
PugiXML庫是一個(gè)功能強(qiáng)大、簡單易用的C++ XML解析庫,它提供了一組方便的函數(shù)來解析、創(chuàng)建和修改XML文檔,本文介紹了如何使用PugiXML庫來解析、創(chuàng)建和修改XML文檔,以及如何處理錯(cuò)誤和異常,感興趣的朋友跟隨小編一起看看吧2024-03-03詳解c++中signal信號攜帶數(shù)據(jù)的接收與發(fā)送
這篇文章主要為大家詳細(xì)介紹了c++中signal信號攜帶數(shù)據(jù)的接收與發(fā)送的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01