日期:2011-03-22 13:55:00 来源:本站整理
<b>数据构造学习(C++)之递归</b>[VC/C++编程]
本文“<b>数据构造学习(C++)之递归</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
看过这样一道题,问,“程序构造化计划的三种底子构造,次序、挑选、循环是不是必须的?”当然,你知道这样一个结论,只要有这三种就充足了;但是能不能更少呢?答案是“可以”,缘由就是递归能代替循环的作用,比方下面的对一个数组里面元素求和的函数:
float rsum (float a[], const int n)
{
if (n <= 0) return 0;
else return rsum(a, n – 1) + a[n – 1];
}
实际上就是:
sum = 0;
for (int i = 0; i < n; i++) sum += a[i];
但实际的情形是,任何的一种语言里面都有循环构造,但不是任何的语言都支持递归;套用一句话,递归是万能的,但没有递归不是万万不能的.但是,我看到目前的某些人,不管什么问题都要递归,明显循环是第一个想到的办法,恰好费尽头脑去探求递归算法.对此,我真的不知道该说什么.
递归是算法吗
常常的看到“递归算法”、“非递归算法”,这种提法没有语义上的问题,并且我自己也这样用——递归的算法.但这也正阐明了,递归不是算法,他是一种思惟,恰是因为某个算法的指导思惟是递归的,所以才被称为递归算法;而一个有递归算法的问题,当你不利用递归作为指导思惟,这样得到的算法就是非递归算法.——而关于循环能处理的问题,都有递归解法,在这个意义上说,循环算法都可以称为非递归算法.
我在这咬文嚼字没什么别的意思,只是想让大家知道,能写出什么样的算法,关键是看你编写算法时的指导思惟.假如一开始就想到了循环、迭代的办法,你再操心耗神去找什么递归算法——即便找到了一种看似“简便”的算法,由于他的低效实际上还是废物——你还在做这种无勤奋干什么?典型的学究陋习.假如你仅仅想到了递归的办法,目前你想用栈来消解掉递归,你做的工作仅仅是把系统做的事自己做了,你又能把效率提高多少?盲目的迷信消解递归就一定能提高效率是无按照的——你做的工作的办法假如不得当的话,乃至还不如系统本来的做法.
以上是“<b>数据构造学习(C++)之递归</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论