c语言递归函数的题目 c语言递归函数是什么

一道C语言的题目,递归法

#include

成都创新互联专注于三元网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供三元营销型网站建设,三元网站制作、三元网页设计、三元网站官网定制、成都微信小程序服务,打造三元网络公司原创品牌,更为您提供三元网站排名全网营销落地服务。

#include

/*求n的

阶乘

,递归,

分母

部分

*

结束条件为:1的阶乘=1

*

递归时,一定要有结束条件

*/

int

factorial

(n)

{

if(n==1)

//递归结束条件,1的阶乘为1

return

1;

else

return

n*factorial(n-1);

//n的阶乘为n乘以(n-1)!

}

int

main()

{

int

n,x;

size_t

i;

//i为

无符号整数

double

re=0;

printf("input

n

and

x:");

scanf("%d%d",n,x);

//输入n和x的值

for(i=1;i=2*n-1;i+=2)

{

/*pow函数求的是x的i次方,分母为

i的

阶乘。本部分可以优化,因为i的阶乘算出来了,所以i+2的阶乘就是i的阶乘*(i+1)*(i+2),不用重复来计算阶乘。自己可以试试*/

re

+=

pow(x,i)/factorial(i);

}

printf("\nn=%d\tx=%d\tresult=%f\n",n,x,re);//打印出

最后的结果

return

0;

}

用c语言,利用递归函数求n!,由键盘输入任一整数,求n!

首先明确题目要求:递归函数,求n!

递归函数的含义:

编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。

n!表示阶乘函数,即1*2*3*……*n

下面给出代码:(C语言实现 )

比较简单的尾递归实现:

#includestdio.h

long digui(int n);  //递归函数声明

int main()

{

int n;  

scanf("%d",n);

printf("the result is %ld",digui(n)); //打印出递归值

return 0;

}

long digui(int n)  //递归函数部分

{

if(n1)   

return n*digui(n-1);   //调用递归,让n与n-1相乘,直到n1时

return 1;   //n1时,返回1,实现 n*(n-1)*(n-2)*……*3*2*1

}

C语言 递归函数题 求解答

#includestdio.h

void revert(int cnt) {

int tmp;

if(cnt0)

{

scanf("%d",tmp);

revert(cnt-1);

printf("%d ",tmp);

}

}

void main(void)

{

int cnt=0;

scanf("%d",cnt);

revert(cnt);

}

c语言,求这道题用递归函数的答案题目如图

递归,就是在运行的过程中调用自己。

构成递归需具备的条件:

函数嵌套调用过程示例

1. 子问题须与原始问题为同样的事,且更为简单;

2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。

例如,下列为某人祖先的递归定义:

某人的双亲是他的祖先(基本情况)。某人祖先的双亲同样是某人的祖先(递归步骤)。斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21..... I[1]

斐波纳契数列是典型的递归案例:

递归关系就是实体自己和自己建立关系。

Fib(0) = 1 [基本情况] Fib(1) = 1 [基本情况] 对所有n 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义] 尽管有许多数学函数均可以递归表示,但在实际应用中,递归定义的高开销往往会让人望而却步。例如:

阶乘(1) = 1 [基本情况] 对所有n 1的整数:阶乘(n) = (n * 阶乘(n-1)) [递归定义] 一种便于理解的心理模型,是认为递归定义对对象的定义是按照“先前定义的”同类对象来定义的。例如:你怎样才能移动100个箱子?答案:你首先移动一个箱子,并记下它移动到的位置,然后再去解决较小的问题:你怎样才能移动99个箱子?最终,你的问题将变为怎样移动一个箱子,而这时你已经知道该怎么做的。

如此的定义在数学中十分常见。例如,集合论对自然数的正式定义是:1是一个自然数,每个自然数都有一个后继,这一个后继也是自然数。

德罗斯特效应是递归的一种视觉形式。图中女性手持的物体中有一幅她本人手持同一物体的小图片,进而小图片中还有更小的一幅她手持同一物体的图片,依此类推。

德罗斯特效应

又例如,我们在两面相对的镜子之间放一根正在燃烧的蜡烛,我们会从其中一面镜子里看到一根蜡烛,蜡烛后面又有一面镜子,镜子里面又有一根蜡烛……这也是递归的表现。

C语言求一些关于递归的练习题

1、编写递归函数求 1+2+3+……+n 的和;

2、编写递归函数求 2*4*6*……*(2n) 的积;

3、编写递归函数求 n 的阶乘;

4、汉诺塔问题;

实际上很多问题都可以通过递归来实现,但是看到你的情况估计较难的你实现不了,所以给你几个简单的练习一下,这样可以增强对递归的理解,等理解的较为深入后再做稍微难一些的。

c语言递归题目

#includestdio.h

#includestring.h

int isLetter(char c){

if(c= 'A' c= 'Z') return 1;

if(c= 'a' c= 'z') return 1;

return 0;

}

int ID(char *s ,int m,int n){

int i;

int cnt = 0;

for(i=m;i=n;i++){

  if(s[i] == '(') cnt ++;

  if(s[i] == ',') {

          if(cnt == 1) return i;

  }

  if(s[i] == ')') cnt --;

}

return i;

}

int isS(char *s,int m,int n){

if(m == n isLetter(s[m])) return 1;

int k = ID(s,m,n);

if( s[m] == '('

  s[n] == ')'

  k m

  k n

  isS(s,m+1,k-1)

  isS(s,k+1,n-1)

) return 1;

else return 0;

}

int main(){

char s[4096];

while(gets(s)){

  if(isS(s,0,strlen(s)-1)) printf("%s是S表达式\n",s);

  else printf( "%s不是S表达式\n",s);

}

}


网站标题:c语言递归函数的题目 c语言递归函数是什么
标题网址:http://ybzwz.com/article/hiccop.html