将一个问通过递归来解决的思路是:
1. 将原问题不断分解为相同模型的子问题。
2. 寻找边界条件,当不满足边界条件则继续分解问题,满足则开始求解。
eg:
1.求和
模型:
1. 将原问题不断分解为相同模型的子问题(前N项和可以分解为n加上n-1的前n-1项和 Sum(n) -> n + Sum(n-1))。
2. 寻找边界条件,当不满足边界条件则继续分解问题 (n > 1),满足则开始求解 (n == 1)。
实现:
unsigned int sum(unsigned int n) { if(n != 1) { return (n + sum(n -1)); } else { return 1; } }
2. 求斐波那契数
模型:
1. 将原问题不断分解为相同模型的子问题 (一个下标对应的斐波那契数为前两个斐波那契数之和 fac(n) -> fac(n-1) + fac(n-2))。
2. 寻找边界条件,当不满足边界条件则继续分解问题 ,满足则开始求解 (n == 1 || n == 2)。
实现:
unsigned int fac(unsigned int n) { if(n > 2) { return (fac(n - 1) + fac(n - 2)); } else if((n == 1) || (n == 2)) { return 1 } return 0; }
3. 求字符串长度
模型:
1. 将原问题不断分解为相同模型的子问题 ( 一个字符串长度分解为首字符加剩余字符长度strlen(s) -> 1 + strlen(s-1) )。
2. 寻找边界条件,当不满足边界条件则继续分解问题(没有遍历到' ') ,满足则开始求解 (遍历到' ')。
实现:
unsigned int strlen(unsigned char* str) { unsigned int len = 0; if(*str != '