日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言(CED)王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数(递归求解)

發布時間:2025/3/8 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言(CED)王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数(递归求解) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(請先看置頂博文)https://blog.csdn.net/GenuineMonster/article/details/104495419

?

?

題目大意:王老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數。例如:樓梯一共有3級,他可以每次都走一級,或者第一次走一級,第二次走兩級也可以第一次走兩級,第二次走一級,一共3種方法。編寫一個程序,要求輸入樓層,輸出王老師上樓的方法總數。

一、大致思路

這道題其實之前大家都有接觸過,這道題目的解法也很多,今天要介紹的是遞歸解法。

我們先把n=1,n=2,n=3,n=4,n=5的情況列舉出來,發現,有一個規律,那就是我們常見的斐波那契數列的規律。既然已經發現這個規律,那么就對其進行分類,并遞歸解決問題。為了讓大多數檢驗結果能順利輸出,在此,運用long大數定義。(因為題目簡單,所以就沒有在思路上多加敘述,如若不解,還請留言!很喜歡與大家交流學習)

二、具體實現

#include<iostream> #include<cmath> using namespace std; long long calculate(int n)//用long long定義,整形范圍更大 {long long a[100] = { 0 };a[0] = 1;//根據邏輯推理得出,所要求的方法數是前兩個的和。a[1] = 2;//同上if (n == 1)return 1;else if (n == 2)return 2;elsereturn calculate(n - 1) + calculate(n - 2);//遞歸求解 } int main() {int n;cout << "請輸入上樓的樓梯數:" << endl;while (cin >> n){if (n == 0){cout << "輸入有誤,請重新輸入!" << endl;continue;}cout << "對應的走法有:" << endl;cout << calculate(n) << endl;cout << "王老師已成功上樓!" << endl;cout << "請輸入下一上樓的樓梯數:(無其他輸入請按EOF結束)" << endl;}return 0; }

那么突發奇想,要是王老師每次走1級或者2級或者3級呢?這樣該如何求解呢?

愚拙的我將1-6的方法種類全部列出,發現了這個規律:

calculate(n)=calculate(n-1)+calculate(n-2)+calculate(n-3)。

如下圖所示:(我的字不是下面這樣的)

二、具體實現

#include<iostream> #include<cmath> using namespace std; long long calculate(int n)//用long long定義,整形范圍更大 {long long a[100] = { 0 };a[0] = 1;//根據邏輯推理得出,所要求的方法數是前三個的和。a[1] = 2;//同上a[3] = 4;//同上if (n == 1)return 1;else if (n == 2)return 2;else if (n == 3)return 4;elsereturn calculate(n - 1) + calculate(n - 2) + calculate(n - 3);//遞歸求解 } int main() {int n;cout << "請輸入上樓的樓梯數:" << endl;while (cin >> n){if (n == 0){cout << "輸入有誤,請重新輸入!" << endl;continue;}cout << "對應的走法有:" << endl;cout << calculate(n) << endl;cout << "王老師已成功上樓!" << endl;cout << "請輸入下一上樓的樓梯數:(無其他輸入請按EOF結束)" << endl;}return 0; }

解決題目的前提:

1、理解題意

2、列舉情況并細心觀察

總結

以上是生活随笔為你收集整理的C语言(CED)王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数(递归求解)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。