斐波那契数列
#include<stdio.h>
int fi(int n){
if(n==1||n==2) return 1;
else return fi(n-1)+fi(n-2); //递推式
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",fi(n));
}
return 0;
}
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)N为阶梯数
way1: 非递归
#include<stdio.h>
long long F[91]; //保存数列的值,由于数值过大,我们需要使用long long
int main(){
F[1]=1;
F[2]=2;
for(int i=3;i<=90;i++){
F[i]=F[i-1]+F[i-2];
}
int n;
while(scanf("%d",&n)!=EOF){
printf("%lld\n",F[n]);
}
return 0;
}
way2: 递归
#include<stdio.h>
int fi(int n){
if(n==1) return 1;
if(n==2) return 2;
else return fi(n-1)+fi(n-2);
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
printf("%d\n",fi(n));
}
return 0;
}
递归其实就是将一个问题分割成规模较小的几个问题,分割过程中要做到不遗漏不重复,确定它们的关系从而得到递推式。
必须要设定递归的出口,即当函数达到某种条件时停止递归。

被折叠的 条评论
为什么被折叠?



