递归的数学思维

递归是一种数学上分而自治的思维
递归须要有边界条件
当边界条件不满足时,递归持续进行
当边界条件满足时,递归进行

递归函数

函数体外部能够调用本人
递归函数
函数体中存在自我调用的函数
递归函数是递归的数学思维在程序设计中的利用
递归函数必须有递归进口
函数的有限递归将导致程序栈溢出而解体

递归函数设计示例一

用递归的办法编写函数求字符串长度

“D.T.software”
strlen(s) = 1 + strlen(s + 1) *s != '0'
strlen(s) = 0 *s == '0'
例子47-1:

#include "stdio.h"int strlen_r(char *s){    if(*s != '\0')    {        return 1 + strlen_r(s+1);    }    else    {        return 0;    }}int main(){    printf("%d\n",strlen_r("abc"));    printf("%d\n",strlen_r(""));    return 0;}

输入后果:

30

递归函数设计示例二

斐波拉契数列递归解法
-1,1,2,3,5,8,13,21,...
数学公式:
fac(n) = fac(n-1) + fac(n-2) n>=3;
fac(n) = 1 n==2;
fac(n) = 1 n==1;
例子47-2:

#include "stdio.h"int fac(int n){    if(n == 1)    {        return 1;    }    else if(n == 2)    {        return 1;    }    else if(n >= 3)    {        return fac(n - 1) + fac(n - 2);    }} int main(){    printf("%d\n",fac(1));    printf("%d\n",fac(2));    printf("%d\n",fac(5));    return 0;}

输入后果:

115

小结

递归是一种将问题分而自治的思维
用递归解决问题首先要建设递归的模型
递归解法必须要有边界条件,否则无解