我们在使用递归解决问题时,需要考虑问题本身是否满足递归的要素,即:
1,问题的是否可以分解为规模更小的子问题。
2,是否有一个结束条件。
同时在写代码的时候还要注意一点,子问题的解必须参与到本次问题的解的核心逻辑当中。
下面是我在考虑好了问题后,给出我自己写的代码
#include#include //递归算法函数定义 int max_f(int arr[],int icur,int remain)//arr 数组首地址,icur代表本次问题涉及的元素下标,remain为剩下的元素个数 { int max_val; if(remain== 1) return arr[icur];//退出条件为剩下元素个数为1时,直接返回对应下标的数据 //下面是核心逻辑 int remain_max = max_f(arr,icur+1,remain-1);//子问题的解,放在变量remain_max当中 这里其实是“递归”当中的递,相当于步进 if(arr[icur]>remain_max)//子问题的解参与到核心逻辑当中 max_val= arr[icur];//核心逻辑 求本次问题的解 else max_val=remain_max;//核心逻辑 求本次问题的解 return max_val;//得到本次问题的解 返回 这里其实是“递归”思想当中的归 相当于回溯。 } int main() { int arr[]={1 ,2,3,4,5,6,7,8,9,0}; int max_v = max_f(arr,0,10); printf("max val is %dn",max_v); return 0; }
递归函数的实现与函数参数定义是紧密相连的,参数相当于数据结构。不同的参数定义,写出来的算法不同,我们求同存异,把握好思想。



