【項目-爬樓梯】
樓梯有n階臺階,上樓可以一步上1階,也可以一步上2階,編一程序計算共有多少種不同的走法?
【參考解答(遞歸法)】
基礎:樓梯有一個臺階,只有一種走法(一步登上去);兩個臺階,有2種走法(一步上去,或分兩次上去);
遞推:有n個臺階時,設有count(n)種走法,最后一步走1個臺階,有count(n-1)種走法;最后一步走2個臺階,有count(n-2)種走法。于是count(n)=count(n-1)+count(n-2)。
可見,此問題的數學模型竟然是斐波那契數。
#include<stdio.h>int main(){ unsigned long count(int n); int n; unsigned long m; printf("請輸入樓梯的階數:"); 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);}
遞歸思路清晰,但卻“成本”高。另一個方法,在完成問題建模之后,采用了一種很巧妙的“非常規”的做法,將運算量減少了一半。
//計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);}
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。如果你想了解更多相關內容請查看下面相關鏈接
新聞熱點
疑難解答
圖片精選