递归--清橙 小结

来源:互联网 发布:sql单引号转义insert 编辑:程序博客网 时间:2024/06/10 17:52

包含题目:A.1044 A.1037

A.1044 Fibonacci数列
递归式:f[i]=f[i-1]+f[i-2]
递归基:f[1]=f[2]=1
【注:本题要求输出前n项和,而非第n项】

//递归版#include<cstdio>using namespace  std;int sum = 0;int F(int n) {    if (2 == n)        return 1;    else if (1 == n)        return 1;    else        return F(n - 1) + F(n - 2);}int main() {    int n;    scanf("%d", &n);    while (n != 0) {        sum = 0;        if (n == 1 || n == 2) sum = 1;        else //这样累加好像有点笨,待优化            for (int i = 1; i <= n; i++) {                sum += F(i);            }        printf("%d\n", sum);        scanf("%d", &n);    }       return 0;}
//迭代版【借鉴自本题试题讨论区】#include"stdio.h"int main(){    int ans,f[4],i,n;    while(1){        ans=0;        f[0]=1;        f[1]=1;        scanf("%d",&n);        if(!n)            break;        for(i=0;i<n;i++){//循环迭代            ans+=f[0];            f[2]=f[1]+f[0];            f[0]=f[1];            f[1]=f[2];        }        printf("%d\n",ans);    }    return 0;}

A.1037.下楼问题
题意:每步可走1个台阶、2个台阶或者3个台阶,求方案数

#include<cstdio>using namespace  std;int F(int n) {    if (n < 0) return 0;    else if (0 == n || 1 == n) return 1;    else if (2 == n) return 2;    else return F(n - 1) + F(n - 2) + F(n - 3);}int main() {    int n;    scanf("%d", &n);    if(n >= 4 && n <= 20) printf("%d\n", F(n));    else printf("0\n");    return 0;}
0 0
原创粉丝点击