引言:
? ? ? ? 我们在C语言的学习过程中都会遇到递归这一基础用法,在函数里面调用函数;
在此处我将递归的一些我们会接触到的题型进行解释分享;
问题简述:
? ? ? ? 现在有一个青蛙,它一次跳跃可以跳1个台阶或者两个台阶;
? ? ? ? 给定台阶? 阶数n;求出有几种跳法;
? ? ? ? ?乍看一下还是非常简单的,现在我们来安照递归的思想来实现;
问题解决:
? ? ? ? ? ? 在这里我分享一下我的简单的思路;首先,它每次跳都会有两种情况;根据对递归的理解,我们可以将每次跳台阶作为一个简单的单一的过程进行分割,实现递归思想的实现:
? ? ? ?给大家画个草稿做个简单理解:
通过这个图我们可以清晰地发现,它的每次的跳跃实现,是对+1 +2的一个选择;最后检测结果是否等于这个阶数,和等于这个阶数的情况的检测;最后在这个自定义函数中返回这个值;
? ? ? ? ? ?在通过这个思路,我再进行了进一步的思考,我发现可以进行逆向的实现,以减少变量的使用,这里依旧以草稿的形式给大家呈现:
????????
?ok? 我们将这个的实现进行的逆向的处理;改为检测0的出现次数,再返回值;
C语言代码实现:
#include <stdio.h>
int main()
{
int n, count = 1;
int run(int n);
printf("请输入要跳几阶:");
scanf_s("%d", &n);
count = run(n);
printf("一共有%d可能!", count);
return 0;
}
int run(int n)
{
int count = 0;
if(n - 1 == 0 || n - 2 == 0)
count++;
if (n - 1 > 0)
count += run(n - 1);
if (n - 2 > 0)
count += run(n - 2);
return count;
}
在此处,我通过定义一个count进行计数,以及run函数里面的递归实现;
ps:如果大家觉得有用的话,点赞加收藏哦;另外如果有错误的地方的话,欢迎大家纠正,谢谢
同样,如果大家喜欢递归这一板块的话,同样可以订阅,谢谢;
|