机试算法讲解:第47题 递推之N阶楼梯如何上楼

/*
递推求解:确定几个规模较小的答案,考虑如何由规模较小的问题的答案推出后面的答案
问题:N阶楼梯上楼问题:一次可以走两阶或者一阶,问有多少种上楼方式(要求采用非递归)
输入:一个整数N(1<=N<90)
输出:输出阶数为N时的上楼方式的个数
输入:
4
输出:
5
思路:
当n>2时,最后一步的行走方式可能:1)走到N-1阶台阶,走一步形成,上楼方式与原问题中到达n-1阶方式数量相同为F[n-1]。2)走到N-2阶台阶,走两步形成,上楼方式与原问题中
到达n-2阶台阶的方式数量相同,为F[n-2]
关键:
1 递推求解在于确定数列的递推关系
F[n]={n,n=1或2
     {F[n-1]+F[n-2],n>2
2 采用递归时从现在向前面追溯,不用递归,从现在向后面预处理.先计算出F[n] = F[n-1] + F[n-2]
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 91
//关键,不能使用递归,则我们需要预处理

int main(int argc,char* argv[])
{
	_int64 F[N];
	F[1] = 1;
	F[2] = 2;
	for(int i = 3 ; i <= 90 ; i++)
	{
		F[i] = F[i-1] + F[i-2];
	}
	int n;
	while(EOF!=scanf("%d",&n))
	{
		printf("%ld\n",F[n]);
	}
	system("pause");
	getchar();
	return 0;
}

你可能感兴趣的:(递推,机试算法)