用递归算法解决问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用递归算法解决问题相关的知识,希望对你有一定的参考价值。

There are N apples,a rabbit throw away one apple and
cat three quarters of the apples a day.Afier 10 days,there
are remain one apple.N=? Use recursive program to
solve the problem.

参考技术A   递归函数通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
  (1)边界条件:确定递归到何时终止,也称为递归出口。
  (2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果。
  递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。说白了,还是函数调用。既然是函数调用,那么就有一个雷打不动的原则:所有被调用的函数都将创建一个副本,各自为调用者服务,而不受其他函数的影响。

C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一

C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接着吃了前一天剩下的一半,再多吃了一个,以后每天如此,直到第n天,只剩下1个桃子,问猴子一共摘了多少桃子? 我不用递归会写,用递归怎么写?

#include <stdio.h>

int n;                 //n作为全局变量

int peach(int x)       //表示第x天有几个桃子

    if(x < n)          //如果x不是最后一天,那么这一天桃子的数量等于明天桃子数加1再乘以2
        return 2*(peach(x+1) + 1);
    else if(x == n)    //如果是最后一天,返回1
        return 1;
    else
        return -1;    //异常



int main()

    scanf("%d",&n);    //输入题目中的n
    printf("%d\\n",peach(1));
    return 0;

请采纳。

参考技术A #include <stdio.h>
int n; //n作为全局变量
int peach(int x) //表示第x天有几个桃子

if(x < n) //如果x不是最后一天,那么这一天桃子的数量等于明天桃子数加1再乘以2
return 2*(peach(x+1) + 1);
else if(x == n) //如果是最后一天,返回1
return 1;
else
return -1; //异常

int main()

scanf("%d",&n); //输入题目中的n
printf("%d\n",peach(1));
return 0;
请采纳。
参考技术B #include<stdio.h>
int N; //吃到N天还没吃时,剩1个,全局变量
int funn(int n)

if(n==N)
return 1;
else
return 2*funn(++n)+2;

int main()

int days,y;
printf("输入多少天后剩一个\n");
scanf("%d",&N);
for(days=1;days<=N;days++)

y=funn(days);
printf("days%d\t%d\n",days,y);
if(y<0)

printf("输入有误");//N<=30不会溢出
break;


参考技术C 10-5-1=4-2-1=1

以上是关于用递归算法解决问题的主要内容,如果未能解决你的问题,请参考以下文章

Python进阶:递归算法

递归算法的特性

Python用迭代(yield)和递归解决八皇后问题

C语言 用递归算法来解决猴子吃桃问题。:一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一

python之路-递归算法

day④:递归