3的递归算法
Ⅰ 怎样用递归法求3!+5!+7!的值
思路段喊分析:
n! = n*(n-1)! // n的阶乘可以化为n乘以(n-1) 的阶乘,这就是递归
当n=0或1时乎厅,n! = 1 // 这就是递归终止条件
实现算法程序:
double fun(int n) // 递归函数求n的阶乘
{
if(n==0 || n==1) // 递归终止条件
return 1;
else
return n*fun(n-1); // 进行递归握顷野运算
}
Ⅱ 什么是递归算法
一、含义不同:
递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。宽高棚
递归循环中,遇到满足终止条件的情况时逐层返回来结束。迭代则使用计数器结束循环。当然很多情况都是多种循环混合采用,这要根据具体需求。
二、结构不同:
递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构。 递归与迭代都涉及重复:迭代显式使用重复结构,而递归通过重复函数调用实现重复。
递归与迭代都涉及终止测试:迭代在循环条件失败时终止,递归慎则在遇到基本情况时终止,使用计数器控制重复的迭代和递归都逐渐到达终止点:迭代一直修改计数器,直到计数器值使循环条件失败;递归不念纳断产生最初问题的简化副本,直到达到基本情况。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
(3)数据的结构形式是按递归定义的。
如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。
以上内容参考:网络-递归
Ⅲ 用递归算法找出 5 个自然数中取 3 个数的组合。
替规算法找出5个自然数中取三个数的组合的话,就选三个相近的数或者是三个相等的数。
设A:第一个数定为1,就是余下的就是四个数里选三个。
设:第一个数定为2,也是余下的就是四个数里选三个。
接着设A:第一个数是1了,那设B:第二个数是2,剩余的就是三个里选两个。
接着设A:第一个数是1了,那设B:第二个数是3,剩余的也是三个里选两个。
以此类推,原理一样的,这也就是递归的原理吗——同一种方法的普适性。
(3)3的递归算法扩展阅读:
数据类型可以通过递归来进行定义,比如一个简单的递归定义为自然数的定义:“一个自然数或等于0,或等于另一个自然数加上1”。Haskell中可以定义链表:
dataListOfStrings=EmptyList|ConsStringListOfStrings这一定义相当于宣告“一个链表或是空串行,或是一个链表之前加上一个字符串”。可以看出所有链表都可以通过这一递归定义来达到。
Ⅳ java用递归算法求 1-2+3-4+5-6......+
//花了几分钟就写出来了,哈哈,代码很租蔽笑简单,就不写注释了并尘,有疑问弊含,再问
public
class
DiGui
{
public
static
void
main(String
args[]){
int
n
=
3;
int
rst
=
getResult(n);
System.out.println(n+"的执行结果:"+rst);
}
public
static
int
getResult(int
n){
int
result
=
0;
for(int
i=1;i<=n;i++){
switch(i%2){
case
0:result
-=i;
break;
case
1:
result
+=
i;
break;
}
}
return
result;
}
}
Ⅳ C语言如何用递归算法求1!+2!+3!+...n!
#include<stdio.h>
float fun(int n)
{
if(n==1) return 1;//如果n=1则直接返回1
return n*fun(n-1);//否则返回n*fun(n-1),以此计算n的阶乘,这条语句就是递归体
}
void main()
{
int i;
float sum=0;
for(i=1;i<=n;i++){
sum+=fun(i); //循环调用,用sum累计
}
printf("sum=%.2f\n",sum);
}
Ⅵ 三次递归怎么做
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数)。
递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。
特点
递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
递归算法解决问题的特点:
(1) 递归就是在过程或函数里调用自身。
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
(4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。丛稿罩所以一般不提倡用递归算法设计程序。
要求敬和
递归算法所体现的“重复”一般有三个要求:
一是每次调用在规模上都有所缩小(通常是减半);渗闹
二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);
三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。
Ⅶ 利用递归算法,求1+2+3+4+……+n,n由键盘输入
算式纯配如下:
#include "stdio.h"
int fun(int n)
{if(n==1)return 1;
return n+fun(n-1);
}
int main()
{int n;
scanf("%d",&n);
printf("1+2+...+%d=%d ",n,fun(n));
return 0;
}
递归数据
数据类型可以通过递归来进行定义,比如一个简单的递归定义为自然数的定义:“一个自然数或等于0,或等于另一个自然数加上1”。Haskell中可以定义链表为:
这一定义相当于宣告“一个链表或是空做键指串行,或是一个链表之前亮此加上一个字符串”。可以看出所有链表都可以通过这一递归定义来达到。
Ⅷ 递推算法和递归算法有什么区别
1、算法的过程不同
递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。
递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。
Ⅸ 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
代码如下:
public class Test {
public static void main(String[] args) {
首雀 System.out.println("结果是:"+Test.foo(30));
}
/**
* 常见解法
*/
public static int foo(int i){
int a=1,b=1;
int c=0;
for(int k=2;k<i;k++){//注意循环次数
c=a+b;
a=b;//注意这句要放在b=c之前
b=c;
}
return c;
}
}
(9)3的递归算法扩展阅读
递归思想的内涵:
递归就是有去(递去)有回(归来)。“有去”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的钥匙可以打开后面所有门上的锁一样。
“有回”是指 : 这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。
更直接地说,递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决。特别地,在函数实现时,因为解决码喊大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它者模早自身的情况,这也正是递归的定义所在。
格外重要的是,这个解决问题的函数必须有明确的结束条件,否则就会导致无限递归的情况。