递归算法

以前学VB的时候看过关于递归算法的一些教程,但是那个时候愣是看不懂,今天重看了C的写法,大概懂了,写下来,但是记忆加深。

递归算法必须满足以下三个条件才可以成立。
1.具有规律性(基本上可以用for解决的),所求问题可以用同个法子解决。例如:
有5个数,a1,a2,a3,a4,a5,其中a5=a4+2,a4=a3+2,a3=a2+2,a2=a1+2。。。如果转换成公式的话则为aN=a(N-1)+2。
2.子问题的规模比原问题的小,规模应该是具有规律性的递减。
3.必须有递归结束的条件。

简单的例子,有5个数,a1,a2,a3,a4,a5,其中a5=a4+2,a4=a3+2,a3=a2+2,a2=a1+2,a1=10,求a5的值?
c语言(其他语言基本可以参考着实现)



#include <stdio.h>
void main()
{
int add( int n);  /*声明函数*/
printf("%d \n",add(5));/* 打印结果 */
}
int add(int n)
{
    if(n==1) return 10; /* 如果n是1话,那么返回结果10 */
    else return add(n-1)+2; /* 否则,返回 (n-1)+2 */
}

递归比较难以理解的地方在于函数自我调用的过程,但是如果用一个图来解释的话,那是比较容易看懂,一共分为2个部分,第一部分是回朔,就是找到源头,如果把本例的add(int n)函数进行图解的话:

递归算法 - 80后 - 小草
函数首先会判断N的值,如果不是1,就自我调用,而每次调用的时候,N的值都会递减下去,一直到N=1,如果没有N=1的情况,那么程序会报错。一旦N=1,函数就终止自我调用,返回一个具体的值,而这个具体的值再逐个代入到上一级的调用当中,最后计算出结果。如果用循环语句也可以实现,其实个人认为大部分的时候递归可以完成的事情用循环语句都是可以解决的。所以如果会用循环的话,不用一直苛求一定要使用递归的算法,只要能解决问题就好。
附上本例的循环循环语句解法:

#include <stdio.h>

void main()
{
   int a=10;/*已知a1=10,从a2开始计算到a5,每次a等于上一个值+2*/
    for(int i=2;i<=5;i++)
{
     a+=2;
printf("%d",a);
}




 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值