递归的标准模式(有可对函数的入口进行测试的基本情况)
if (条件)
return (不需要递归的简单答案);
else
return (递归调用同一函数);
如求阶乘的递归函数:
unsigned long factorial(unsigned long number)
if(number=1; i–)
result *= i;
return result;
对于大多数常用的递归都有简单、等价的迭代程序。究竟使用哪一种,凭你的经验选择。
迭代程序复杂,但效率高。
递归程序逻辑清晰,但往往效率较低(空间复杂度高)。
3 迭代和递归对比
迭代和递归都是基于控制语句的:迭代使用循环结构,递归使用选择结构。
迭代和递归都涉及到循环,迭代显式地使用循环结构,递归通过重复的函数调用实现循环。
迭代和递归均包括终止条件测试,迭代在循环继续条件失败时终止,递归在达到基本情况时终止。计数器控制的循环和迭代和递归都是逐步达到终止的。迭代修改计数器直到计数器的值使循环条件不满足;递归产生比原来的问题简单的版本直到达到基本情况。
递归有许多不足之处。它不断地进行函数调用,必然会增加很多开销。这样不仅消耗处理器的时间,还会消耗内存空间。每个递归调用都会创建函数的一份副本(实际上只是函数中的变量),这也会占用相当可观的内存。而迭代器通常发生在一个函数内,因此没有重复的函数调用的开销和额外的内存分配。
4 Fibonacci函数的递归和迭代实现
可以用递归解决的问题绝大部分都可以用迭代(非递归)解决。
Fibonacci函数的递归实现
int f(int n)
{if (n==0) return 0;
elseif (n==1) return 1;.
else return (f(n-1)+f(n-2));
Fibonacci函数的迭代实现
int f(int n)
{ int i, fn, fn_1 = 0, fn_2 = 1;
if (n
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777