小论c语言递归与递推

               

递归和递推都是算法设计中的难点,算法又十分相近,很多和我一样学生误认为是一回事,非常容易混淆。其实它们之间既有相似点,又有明显的区别。

递推一般用循环来解决,从已知条件到未知逐渐接近结果;

(1)将复杂运算分解为若干重复的简单运算

(2)后一步骤建立在前一步骤之上

(3)计算每一步骤的方法相同

(4)从开始向后计算出结果

(5)使用循环结构,通过多次循环逐渐逼近结果

递归一般自己调用自己,从未知到已知,把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。

(1)每一次递归都缩小问题规模,直到问题足够小

(2)使用选择分支语句

(3)从后往开始逐步逼近

(4)达到最开始,再把初始值带入往后逐一求解


下面通过例子逐个介绍。

递推:

一。 解阶乘   n! = 1*2*3*4*....*(n-1)*n.

fun(int n) {      long s=1;   int i;   for(i=1;i<=n;i++)   s=s*i;   return s; }


二。捕鱼问题 

A,B,C,D,E五个渔夫夜间合伙捕鱼,,第二天清A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼

这也是一个递推问题,递推关系式为   F(n+1) = F(n)*5/4+1  (i = 1,2,3,4)  F(5)即捕鱼的总数

#include <stdio.h>int main(){    int i, n, f[5], flag;    flag = 1;    n = 1;    while (flag == 1)    {        f[0] = 5*n+1;          flag = 0;        for (i=1; i<5; i++)        {            if (f[i-1]%4!=0)            {                flag=
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值