递归思想的应用(青蛙跳台阶问题)
在学完递归的时候,感觉很不适应,因为递归与我们现实生活中的想法有点不同,但是只要你把这种方法学到家,那么有时用正常代码需要20-30行,但是用递归用10行之内就可以了,那么从中我们可以认识到:只有我们把不会的学会,学通,即使以后不用,也是能够提高我们的思维能力。
青蛙台阶问题:
我们都学过数学,都知道要想得到一个通用的规律,就需要不断地穷举,直到找到规律(这个过程大概是3---4次)
再写到第4个台阶的问题,我也有点烦了,因为找不到规律,但是我们可以往递归的思想上考虑,而递归的主要是将大问题化为一些小问题(这些大问题只是小问题的数量的增加)。
什么是斐波那契数列呢?
其实这个知识在高中已经学过了,但我为了你们!!!!!!,,就讲讲吧。
斐波那契数列:1、2、3、5、8、13……………………
我们首先知道第一项:1和第二项2,那么之后的每一项都是前两项之和。
n=4时可以化为2个和3个台阶,这种出现的原因是:青蛙可以先跳一个或两个台阶,这样就剩下 n-1个和n-2个台阶,所以青蛙台阶问题与斐波那契问题是换汤不换药。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int frog(int n)
{
if (n == 1)
{
return 1;
}
else if (n ==2)
{
return 2;
}
else
{
return frog(n - 1) + frog(n - 2);
}
}
int main()
{
//青蛙跳台阶问题
int n = 0;
printf("请输入青蛙所跳的台阶数:\n");
scanf("%d", &n);
int c=frog(n);
printf("%d个台阶,青蛙可以跳%d种法", n, c);
return 0;
}
这就是结果,所以成功,来给自己一个鼓掌👏
冒泡排序
这样你们应该能懂了
接下来上硬菜,写代码
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { int n = 0; int arr[10] = { 0 }; printf("请输入你要输入的元素个数:<个数在10个以内>\n"); scanf("%d", &n); printf("请输入您要排序的数:\n"); for (int i = 0; i < n; i++)//复制 { scanf("%d", &arr[i]); } printf("排序前的:\n"); for (int i = 0; i < n; i++)//打印排序前的 { printf("%d ", arr[i]); } printf("\n"); //冒泡排序 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n-1 - i; j++) { if (arr[j] > arr[j + 1])//换顺序 { int tmp = 0; tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } printf("排序后的:\n"); for (int i = 0; i < n; i++)//打印排序后的 { printf("%d ", arr[i]); } }
这样就结束了,😁拜拜!!!!
下次见