一、什么是递归
首先我们来介绍一下什么是递归,递归就是程序自己调用自己的过程。我们知道一个自定义函数可以调用其余的自定义方法,当这个函数调用其自己的时候即为递归。
二、如何解决递归算法
我们已经了解了什么是递归,那么自然而然的就会想到如何解,会有什么思路来解此类问题,在此我总结了三个步骤,如下:
1.当n = 1(或n = 2)时会出现哪些情况。
2.寻找第n项与第n - 1项存在的关系。(在此不明白没有关系,下面我会利用该题具体解释)。
3.寻找边界,即特殊情况。
三、小卒路线问题
【问题重述】
有一个小卒从m行n列的网格中要从左上角走到右下角,且每次只走一格,只允许向右或向下移动。问:小卒有几种路线可以走?如下图所示
1.首先可以发现此时为二元函数的递归问题,与一元的相同,我们先来观察寻找m = 1,n = 1时的情况。
可以看出只有2种路线。
2.拓展到第m行第n列时,我们可以发现,无论哪一格都与上一个存在两条路线,即第m行第n列与第m - 1行第 n - 1列存在的关系为:
f(m,n) = f(m,n - 1) + f(m - 1,n)
3.接下来我们该考虑边界情况:
当 m = 1时,有n列,那么只有1种路线。
当 n = 1时,有m行,也只有1种路线。
使用C语言编译运行:
#include<stdio.h>
int Zu(int m,int n){
if(m == 1) return 1;
else if(n == 1) return 1;
else{
return Zu(m,n - 1) + Zu(m - 1,n);
}
}
int main(){
int n,m;
scanf("%d %d",&m,&n);
printf("在%d行%d列的表格中,卒一种有%d种路线可以走",m,n,Zu(m,n));
return 0;
}
运行效果:
至此,此题大致思路与解法已讲解完毕,如对您有帮助请留下宝贵一赞!如有问题可留言或私信。感谢您的浏览!