1.如何写递归函数递归函数 , 是指某一函数内部自己直接或间接地调用自己 , 即直接递归和间接递归 。是语言中比较高级的技术用法 。
递归函数之所以难 , 是因为是一种过于抽象化的技术
写代码的时候无法直观的看出逻辑是否符合自己要求 , 因此想一次性写好递归函数 , 是一件很困难的事情 , 必须要程序运作起来执行递归函数的代码才能看出是否正确 , 而且进行测试的难度也很高 , 有时的隐含bug可能要软件上线后才会渐渐体现出来 。
首先 ,
要分析清楚满足递归的条件 , 并一一列出 。
其次 ,
要分析不满足条件时的处理方式 。
在列出了所有条件后 , 我们自然还要考虑不满足条件后的结果 , 一种是业务本身要求的不满足条件后的处理 , 另一种就是出现错误时候的处理 。说的简单点 , 就是正确的情景考虑到了后还要考虑错误的情景 。
接下来 ,
要分析递归函数的返回值 。
最后 ,
写完递归函数后一定要进行单元测试 , 测试也要有方法 。
因此难以保障一次写完后正确性 , 所以写完后一定要测试 , 递归函数本身测试也很麻烦 , 递归次数少倒还好 , 递归次数一旦多的话就很头疼 。这时我们可以将循环的次数 , 以及递归的后的结果打印出来 , 看看打印后的结果是否符合自己的预期 , 如果某一递归出现问题 , 可以根据循环次数的记录在调试的时候直接定位 , 这样效率会高很多 , 也容易很多 , 要不然一步步调试看 , 实在是折磨人 。测试的时候一定要涉及到所有满足递归的条件 , 每一条件分支都要检查一遍 , 这样才是较为全面的测试递归的方法 。
写递归函数 , 不是一下两下能搞定的事情 , 本身就是一个反复性工作 , 编写→测试→编写→测试→ 。 , 所以在分析、编写的时候一定要静心、细心 , 不要急躁 , 这样渐渐的递归函数也就健全起来 。头几次写递归函数可能写不好 , 日后多多练习便会慢慢深刻体会到递归的精髓 。
那么我想说的也说完了 , 希望这篇文章能对大家有帮助 。
2.怎么编写一个递归函数#include
unsigned long power( unsigned int q,unsigned int n );
int main()
{
unsigned int number;
unsigned int n;
printf( "输入你的底数: " );
scanf( "%d", &number );
printf( "输入你的次数: " );
scanf( "%d", &n );
printf( "%d\n", power( number, n ) );
return 0;
}
unsigned long power( unsigned int q,unsigned int n )
{
int s = 1;
s = q * s;
if( n == 0 )
{
return 1;
}
if( n == 1 )
{
return q;
}
else
{
return q * power( q, --n );
}
}
3.递归函数的例子这个行吗:
求1+2+……+100的和
先分析一下 。第一递归变量的问题 , 从题目上看应该取1,2 , …… , 100这些变量的值作为递归的条件;第二就是如何终止的问题 , 从题目上看应该是当数为100的时候就不能往下加了 。那么我们试着写一下程序 。
int add(int);
main()
{
int num=1,sn;
sn=add(num);
printf("%d\n",sn);
getch();
}
int add(int num)
{