青蛙跳台阶问题深度解剖(涉及斐波那契数列原理)

青蛙跳台阶问题深度解剖(涉及斐波那契数列原理)
1:函数递推与迭代算法的使用

如: 函数递推求解    1! + 2! + ...... + n!的阶乘
#include<stdio.h>
Fact(n) {
    if (n==0) {
        return 1;
    }
    else {
        return n * Fact(n - 1);
    }

}

int main() {
    int n = 0;
    scanf_s("%d",&n);
    int ret=Fact(n);
    printf("%d\n",ret);

    return 0;

}

函数递推与迭代俩算法的区别
1:递推就是少量代码完成大量运算,把复杂的问题拆分为子问题
2:迭代包含(循环),就是重复做一件事情

例子:
函数递推与迭代俩算法,求解斐波那契数列(1 1 2 3 5 8 13 21 34 55 ........)求第n项
函数迭代

#include<stdio.h>
int fib(int n) {
    int a = 1;
    int b = 1;
    int c = 1;
    while (n>=3) {
        c = a + b;
        a = b;
        b = c;
        n--;


    }
    return c;

}

int main() {

    int n = 0;
    scanf_s("%d",&n);//项数
    int ret = fib(n);
    printf("%d\n",ret);


    return 0;
}

函数递推
#include<stdio.h>
int fib(int n) {
    if (n<=2) {
        return 1;
    }
    else {
        return fib(n-1) + fib(n-2);
    
    }
}

int main() {

    int n = 0;
    scanf_s("%d", &n);//项数
    int ret = fib(n);
    printf("%d\n", ret);


    return 0;
}

重点:青蛙跳台阶
有一只青蛙一次可以跳1个台阶或俩个台阶,问跳到第n个台阶有多少种跳法1f9c1dbd59fa46a1a0015edd78c59969.png

e6843003541d478f9a65bdd757e9a541.png 

052f889668d44e0888f162c1ad225b1a.png 

fc009fc2d83b403abcd2e21d0104d60e.png 

 

       n   1  2  3  4  5   6 ......n
解法  类似 1  2  3  5  8  13  ......

 


函数迭代法
#include<stdio.h>
int result(int n) {
    int a = 0;
    int b = 1;
    int c = 0;
    while (n) {
        c = a + b;
        a = b;
        b = c;
        n--;
    }
    return c;
}


int main() {
    int n = 0;
    scanf_s("%d",&n);
    int ret=result(n);
    printf("%d\n",ret);


    return 0;

}
函数递推法

 n         1  2  3  4  5   6 ......n
解法  类似 1  2  3  5  8  13  ......

#include<stdio.h>
int result(int n) {
    if (n<=3) {
        return n;
    
    }
    else {
    
        return result(n-1) + result(n-2);
    }

}

int main() {
    int n = 0;
    scanf_s("%d", &n);
    int ret = result(n);
    printf("%d\n", ret);


    return 0;

}


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值