青蛙跳台阶问题深度解剖(涉及斐波那契数列原理)
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个台阶有多少种跳法
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;
}