NOI-OJ 2.2 ID:3089 爬楼梯

整体思路

  • 这是一个典型的递归型问题:

    1. 临界点:如果只有1级台阶,有1种走法(一次一步);如果有2级台阶,则有2种走法(一次一步或一次两步)
    2. 递归方法,对于n级台阶,如果第一次走1步,还剩n-1级台阶,n-1级台阶的走法有f(n-1)步,如果第一次走2步,还剩n-2级台阶,n-1级台阶的走法有f(n-2)步,故得到递归关系,f(n)=f(n-1)+f(n-2)
  • 本题在输入数据时和之前的题目稍有不同,并没有给出一个明确的N值表示输入数据的数量或者行数,故可以使用scanf函数循环读取、函数求值、输出。当输入结束时会得到一个EOF(End Of File,-1),即文件结束符。这是循环的终止条件。

在DevC++中输入EOF的方法是“Ctrl+Z”,这样循环方能终止。

例程

#include<iostream>
using namespace std;

int nMethods(int n){
	if(n==1)	return 1;					//临界值
	if(n==2)	return 2;					//临界值
	return nMethods(n-1)+nMethods(n-2);		//递归调用
}

int main(){
	int n;
	while(scanf("%d", &n)!=EOF)				//注意循环终止条件,也可以将EOF写为-1
		cout<<nMethods(n)<<endl;
	return 0;
}
posted @ 2017-04-12 11:45  LFYZOI题解  阅读(416)  评论(0编辑  收藏  举报