เราได้รับจำนวนขั้นทั้งหมดในบันไดที่เป็น n บุคคลสามารถไปถึงชั้นถัดไปได้โดยข้ามทีละ 1, 2 หรือ 3 ก้าว เป้าหมายคือการหาจำนวนวิธีที่จะไปถึงชั้นถัดไปได้
เราจะใช้วิธีเรียกซ้ำโดยจำไว้ว่าการจะไปถึงขั้น i'th ใด ๆ บุคคลต้องกระโดดจากขั้นที่ i-1 (ข้ามไป 1 ขั้นตอน) , ขั้นตอนที่ i-2 (ข้าม 2 ขั้นตอน ) หรือขั้นตอนที่ i-3 ( ข้าม 3 ขั้นตอน )
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล
N=3 steps
ผลผลิต
Count of ways to reach the nth stair using step 1, 2 or 3 are: 4
คำอธิบาย
There are total 3 steps Jump from start ( skip 3 ) : 3 step Jump from 1’st step (skip 2): 1+2 Jump from 2nd step (skip 1): 2+1 No skip 1+1+1
ป้อนข้อมูล
N=6 steps
ผลผลิต
Count of ways to reach the nth stair using step 1, 2 or 3 are: 24
คำอธิบาย
There are total 6 steps Ways: 1+1+1+1+1+1, 2+1+1+1+1, 3+1+1+1, 3+1+2, 3+2+1, 3+3 and so on.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เรากำลังดำเนินการขั้นตอนจำนวนเต็มเป็นจำนวนขั้นตอนทั้งหมด
-
ฟังก์ชันบันได_step(int step) ใช้ทุกขั้นตอนเป็นอินพุต และส่งคืนหลายวิธีในการไปถึงชั้นถัดไปด้วยการกระโดดหรือไม่..
-
ใช้ตัวแปรเริ่มต้นนับเป็น 0 สำหรับวิธีดังกล่าว
-
หากตัวเลขเป็น 0 ให้คืนค่า 1
-
หากนับก้าว 1 ทางเท่านั้น
-
หากนับก้าวเป็น 2 วิธีเท่านั้น ( 1+1 หรือ 2 )
-
วิธีอื่น =บันได_step (ขั้นตอนที่ 3)+บันได_ขั้นตอน(ขั้นตอนที่-2)+บันได_ขั้นตอน(ขั้นตอนที่-1)
(วิธีเรียกซ้ำ)
ตัวอย่าง
#include <iostream>
using namespace std;
int stairs_step(int steps){
if(steps == 0){
return 1;
}
else if(steps == 1){
return 1;
}
else if (steps == 2){
return 2;
}
else{
return stairs_step(steps - 3) + stairs_step(steps - 2) + stairs_step(steps - 1);
}
}
int main(){
int steps = 5;
cout<<"Count of ways to reach the nth stair using step 1, 2 or 3 are: "<<stairs_step(steps);
return 0;
} ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of ways to reach the nth stair using step 1, 2 or 3 are: 13