c语言递归函数怎么写

1.c语言 函数递归调用的简单例子

=#include <stdio.h>

/// 求阶乘函数

/// 递归思想

/// n! = n * (n-1) * (n-2) * 。 * 1

/// n! = n * [(n-1) * (n-2) * 。 * 1]

/// n! = n * (n-1)! 递归方程

/// 这是递归实现

unsigned Factorial(unsigned int n)

{

if (n == 0) return 1; // 对于0的阶乘,当n=0时,递归返回

return n * Factorial(n-1); // 递归调用

}

void main()

{

int n = 3;

printf("3! = %d",Factorial(n));

}

2.如何使用C语言递归函数

递归:函数下一次的参数是函数自身上一次的输出值。(也就是说,函数的下一次取决于上一次的结果,自身依赖)。

也正是因为如此,这样的函数必须有终止值(即递归必须有一个条件限定)。否则就会进入死循环。

“递归”分成“直接递归”、“简介递归”。具体可以参考我的博客(点击, ,查看,有代码有具体示例解释)。

给出一个求n!的C递归:

int Fun(int n)

{

if (n==0 || n==1) return 1;

return Fun(n-1)*n;

}

Sorry, 程序略有写错误,主函数请这样修改:

int main() { int x=0,n=0; printf("输入x:"); scanf("%d",&x); printf("输入n:"); scanf("%d",&n); double sum=0; for(int i=1;i<=n;i+=2) { sum+=Result(x,n); }printf("结果是:%lf",sum); system("pause"); }

3.c语言中的递归

原发布者:zhoujiahaohao2

1.编写计算X的Y次幂的递归函数getpower(intx,int),并在主程序中实现输入输出。#include"stdio.h"longgetpower(intx,inty){if(y==1)returnx;elsereturnx*getpower(x,y-1);}voidmain(){intnum,power;longanswer;printf("pleaseinputanumber:");scanf("%d",&num);printf("pleaseinputthenumber'spowerseries:");scanf("%d",&power);answer=getpower(num,power);printf("结果是:%ld\n",answer);}结果说明:输入61再输入5求得61的5次幂为844596301.2编写计算学生年龄的递归函数。#includeintage(intn){intc;if(n==1)c=10;elsec=age(n-1)+2;returnc;}voidmain(){intn=5;printf("thefivestudent'sageis:%dyearsold\n",age(n));}结果说明:第五个学生的年龄为18岁。3.编写递归函数实现Ackman函数。#includeAcm(intm,intn){if(m==0)returnn+1;elseif(n==0)returnAcm(m-1,1);elsereturnAcm(m-1,Acm(m,n-1));}intmain(){printf("Acm(2,1)=%d\n",Acm(2,1));printf("Acm(3,2)=%d\n",Acm(3,2));return0;}结果说明:利用递归函数求得Acm(2,1)=5,Acm(3,2)=29.实验小结:

4.C语言 递归函数

//方法一,不需将转换后的字符存储在字符数组中

#include

void change(int );

int main()

{

int n;

scanf("%d",&n);

change(n);

printf("\n");

return 0;

}

void change(int num)

{

if(num==0)return ;

change(num/10);

printf("%d",num%10);

}

//方法二,先将转换后的字符存储在字符数组中

#include

#define LEN 100

int m=0;

void change(int ,char *);

int main()

{

int n,i;

char a[LEN];

for(i=0;ia[i]='\0';

scanf("%d",&n);

change(n,a);

printf("%s",a);

printf("\n");

return 0;

}

void change(int num,char *s)

{

if(num==0)return ;

change(num/10,s);

s[m++]=(char)(num%10+'0');

}

5.讲一下c语言中递归函数的使用方法

递归函数有三点要求:

1,递归的终止点,即递归函数的出口

2,不断的递归调用自身

3,递归函数主体内容,即递归函数需要做的事情

ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。

具体例子如下:

void fun(int n)

{

if(n<=0) return; //1 这是递归的终点,即出口

fun(n-1); //2、递归函数自身的调用

cout<<n<<endl; //3 递归函数的主体内容

}

2,3合并的情况

int fun(int n)

{

if(n<=0) return 0;

return fun(n-1)+fun(n-2); //2 3合并

}

6.C语言关于函数的递归

你的递归程序是错的,我转来个对的,带讲解的,你看看。

语言函数的递归和调用 一、基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己。 要点: 1、C语言函数可以递归调用。

2、可以通过直接或间接两种方式调用。目前只讨论直接递归调用。

二、递归条件 采用递归方法来解决问题,必须符合以下三个条件: 1、可以把要解决的问题转化为一个新问题,而这个新的问题的解决方法仍与原来的解决方法相同,只是所处理的对象有规律地递增或递减。 说明:解决问题的方法相同,调用函数的参数每次不同(有规律的递增或递减),如果没有规律也就不能适用递归调用。

2、可以应用这个转化过程使问题得到解决。 说明:使用其他的办法比较麻烦或很难解决,而使用递归的方法可以很好地解决问题。

3、必定要有一个明确的结束递归的条件。 说明:一定要能够在适当的地方结束递归调用。

不然可能导致系统崩溃。 三、递归实例 例:使用递归的方法求n! 当n>1时,求n!的问题可以转化为n*(n-1)!的新问题。

比如n=5: 第一部分:5*4*3*2*1 n*(n-1)! 第二部分:4*3*2*1 (n-1)*(n-2)! 第三部分:3*2*1 (n-2)(n-3)! 第四部分:2*1 (n-3)(n-4)! 第五部分:1 (n-5)! 5-5=0,得到值1,结束递归。 源程序: fac(int n) {int t; if(n==1)||(n==0) return 1; else { t=n*fac(n-1); return t; } } main( ) {int m,y; printf(“Enter m:”); scanf(“%d”,&m); if(m<0) printf(“Input data Error!\n”); else {y=fac(m); printf(“\n%d! =%d \n”,m,y); } } 四、递归说明 1、当函数自己调用自己时,系统将自动把函数中当前的变量和形参暂时保留起来,在新一轮的调用过程中,系统为新调用的函数所用到的变量和形参开辟另外的存储单元(内存空间)。

每次调用函数所使用的变量在不同的内存空间。 2、递归调用的层次越多,同名变量的占用的存储单元也就越多。

一定要记住,每次函数的调用,系统都会为该函数的变量开辟新的内存空间。 3、当本次调用的函数运行结束时,系统将释放本次调用时所占用的内存空间。

程序的流程返回到上一层的调用点,同时取得当初进入该层时,函数中的变量和形参所占用的内存空间的数据。 4、所有递归问题都可以用非递归的方法来解决,但对于一些比较复杂的递归问题用非递归的方法往往使程序变得十分复杂难以读懂,而函数的递归调用在解决这类问题时能使程序简洁明了有较好的可读性;但由于递归调用过程中,系统要为每一层调用中的变量开辟内存空间、要记住每一层调用后的返回点、要增加许多额外的开销,因此函数的递归调用通常会降低程序的运行效率。

五、程序流程 fac(int n) /*每次调用使用不同的参数*/ { int t; /*每次调用都会为变量t开辟不同的内存空间*/ if(n==1)||(n==0) /*当满足这些条件返回1 */ return 1; else { t=n*fac(n-1); /*每次程序运行到此处就会用n-1作为参数再调用一次本函数,此处是调用点*/ return t; /*只有在上一句调用的所有过程全部结束时才运行到此处。*/ } }。

7.c语言递归函数

递归函数:

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

在数学上,关于递归函数的定义如下:对于某一函数f(x),其定义域是集合A,那么若对于A集合中的某一个值X0,其函数值f(x0)由f(f(x0))决定,那么就称f(x)为递归函数。

函数介绍:

在数理逻辑和计算机科学中,递归函数或μ-递归函数是一类从自然数到自然数的函数,它是在某种直觉意义上是"可计算的" 。事实上,在可计算性理论中证明了递归函数精确的是图灵机的可计算函数。递归函数有关于原始递归函数,并且它们的归纳定义(见下)建造在原始递归函数之上。但是,不是所有递归函数都是原始递归函数 — 最著名的这种函数是阿克曼函数。

其他等价的函数类是λ-递归函数和马尔可夫算法可计算的函数。

例子:

//代码1

void func()

{

//。

if(。)

func();

else

//。

}

条件:

一个含直接或间接调用本函数语句的函数被称之为递归函数,在上面的例子中能够看出,它必须满足以下两个条件:

1) 在每一次调用自己时,必须是(在某种意义上)更接近于解;

2) 必须有一个终止处理或计算的准则。

梵塔的递归函数:

//C

void hanoi(int n,char x,char y,char z)

{

if(n==1)

move(x,1,z);

else

{

hanoi(n-1,x,z,y);

move(x,n,z);

hanoi(n-1,y,x,z);

}

}

8.C语言函数递归

几乎每一本C 语言基础的书都讲到了函数递归的问题,但是初学者仍然容易在这个地方犯错误。

先看看下面的例子:void fun(int i){ if (i>0) { fun(i/2); } printf("%d\n",i);}intmain(){ fun(10); return 0;}问:输出结果是什么?这是我上课时,一个学生问我的问题。他不明白为什么输出的结果会是这样:012510他认为应该输出0。

因为当i 小于或等于0 时递归调用结束,然后执行printf 函数打印i 的值。这就是典型的没明白什么是递归。

其实很简单,printf("%d\n",i);语句是fun 函数的一部分,肯定执行一次fun 函数,就要打印一行。怎么可能只打印一次呢?关键就是不明白怎么展开递归函数。

展开过程如下:void fun(int i){ if (i>0) { //fun(i/2); if(i/2>0) { if(i/4>0) { … } printf("%d\n",i/4); } printf("%d\n",i/2); } printf("%d\n",i);}这样一展开,是不是清晰多了?其实递归本身并没有什么难处,关键是其展开过程别弄错了。二、不使用任何变量编写strlen 函数看到这里,也许有人会说,strlen 函数这么简单,有什么好讨论的。

是的,我相信你能熟练应用这个函数,也相信你能轻易的写出这个函数。但是如果我把要求提高一些呢:不允许调用库函数,也不允许使用任何全局或局部变量编写intmy_strlen (char *strDest);似乎问题就没有那么简单了吧?这个问题曾经在网络上讨论的比较热烈,我几乎是全程“观战”,差点也忍不住手痒了。

不过因为我的解决办法在我看到帖子时已经有人提出了,所以作罢。解决这个问题的办法由好几种,比如嵌套有编语言。

因为嵌套汇编一般只在嵌入式底层开发中用到,所以本书就不打算讨论C 语言嵌套汇编的知识了。有兴趣的读者,可以查找相关资料。

也许有的读者想到了用递归函数来解决这个问题。是的,你应该想得到,因为我把这个问题放在讲解函数递归的时候讨论。

既然已经有了思路,这个问题就很简单了。代码如下:intmy_strlen( const char* strDest ){ assert(NULL != strDest); if ('\0' == *strDest) { return 0; } else { return (1 + my_strlen(++strDest)); }}第一步:用assert 宏做入口校验。

第二步:确定参数传递过来的地址上的内存存储的是否为'\0'。如果是,表明这是一个空字符串,或者是字符串的结束标志。

第三步:如果参数传递过来的地址上的内存不为'\0',则说明这个地址上的内存上存储的是一个字符。既然这个地址上存储了一个字符,那就计数为1,然后将地址加1 个char类型元素的大小,然后再调用函数本身。

如此循环,当地址加到字符串的结束标志符'\0'时,递归停止。当然,同样是利用递归,还有人写出了更加简洁的代码:intmy_strlen( const char* strDest ){ return *strDest?1+strlen(strDest+1):0;}这里很巧妙的利用了问号表达式,但是没有做参数入口校验,同时用*strDest 来代替('\0'== *strDest)也不是很好。

所以,这种写法虽然很简洁,但不符合我们前面所讲的编码规范。可以改写一下:intmy_strlen( const char* strDest ){ assert(NULL != strDest); return ('\0' != *strDest)?(1+my_strlen(strDest+1)):0;}上面的问题利用函数递归的特性就轻易的搞定了,也就是说每调用一遍my_strlen 函数,其实只判断了一个字节上的内容。

但是,如果传入的字符串很长的话,就需要连续多次函数调用,而函数调用的开销比循环来说要大得多,所以,递归的效率很低,递归的深度太大甚至可能出现错误(比如栈溢出)。所以,平时写代码,不到万不得已,尽量不要用递归。

即便是要用递归,也要注意递归的层次不要太深,防止出现栈溢出的错误;同时递归的停止条件一定要正确,否则,递归可能没完没了。

9.c语言里递归函数怎么用啊

奉上pascal汉诺塔程序代码,我没有学C。

只学了pascal。

目前在深入学习算法。

汉诺塔是个很典型的递归,是考验程序员的归纳能力的 [*]program hannuota;//汉诺塔游戏[*]var[*]panzi :integer;[*]procedure move(n,a,b,c : integer);[*]begin[*]if n = 1 then[*]write(a,' to ',c)[*]else begin[*]move(n-1,a,b,c);[*]writeln(a,' to ',c);[*]move(n-1,b,a,c);[*]end;[*]end;[*]begin[*]writeln('please write a number of the number of panzi');[*]read(panzi);[*]move(panzi,1,2,3);[*]readln;[*]readln;end.。

c语言递归函数怎么写

转载请注明出处育才学习网 » c语言递归函数怎么写

知识

capilano的音标怎么写

阅读(229)

本文主要为您介绍capilano的音标怎么写,内容包括stonehenge的音标怎么写,turtle的音标怎么写,stonehenge的音标怎么写。如下:单元音(12个)前元音:/i://ɪ//e//æ/中元音:/ɜ://ə/(美式特有音素/ə:r//ər/)后元音:/ɑ://ʌ//

知识

abaptab分隔怎么写

阅读(245)

本文主要为您介绍abaptab分隔怎么写,内容包括两个字符串中间用TAB键隔开,程序里怎么写,如何将Tab横表制表符插在两个字段之间,什么是“以—tab—分隔的数据”。字符串中加入回车换行的示例:DATA: crlf(2) TYPE c.DATA: l_html(4096) TYPE C.

知识

完好无损用英语怎么写

阅读(345)

本文主要为您介绍完好无损用英语怎么写,内容包括完好无损用英文怎样说,货物完好无损怎么翻译啊,英语急啊·,货物完好无损怎么翻译啊,英语急啊·。完好无损的:unwounded 完好货物:sound goodsThe goods is receive in good conditi

知识

胖和瘦的英语怎么写

阅读(299)

本文主要为您介绍胖和瘦的英语怎么写,内容包括瘦和胖的英语写法,“胖”和“瘦”的英文分别是什么,瘦和胖的英语写法。胖 [pán, pàng][ 国标码:C5D6 部首:月 笔画:9 笔顺:351143112 ]plump fat例句:他太胖了,以致于

知识

论文培训方案怎么写

阅读(304)

本文主要为您介绍论文培训方案怎么写,内容包括如何撰写优质论文培训方案,毕业论文:某某企业培训需求分析,要怎么写,毕业设计方案怎么写。◆ 培训主管角色分析及职业定位 ◆ 培训需求分析流程及方法 ◆ 培训调查实用工具包 ◆ 培训ROI多因素

知识

Fireman的音标怎么写

阅读(234)

本文主要为您介绍Fireman的音标怎么写,内容包括单词snowy的音标怎么写,stonehenge的音标怎么写,interviewee的音标怎么写。wash 英 [wɒʃ] 美 [wɑ:ʃ] vt. 洗,清洗; 浸湿; 冲刷,冲击; 洗去罪名; vi. 耐洗; 被洗掉(通常与 out

知识

英语k的笔顺怎么写

阅读(299)

本文主要为您介绍英语k的笔顺怎么写,内容包括英语k的小写怎么写,英语k的小写怎么写,k的笔顺查K的写法是咋样的。英语K的小写在电脑上输入为k,但手写体有所不同,要将右上角的一斜杠变为○,见下图:

知识

listview怎么写死数据

阅读(253)

本文主要为您介绍listview怎么写死数据,内容包括我已经给listview添加了死的值现在我想点击他的某一行然后获取对应,listview如何显示最后一行数据,Android的listview中的数据怎么写。mListView.(new OnItemClickListener() { @Overri

知识

用电开户申请书怎么写

阅读(257)

本文主要为您介绍用电开户申请书怎么写,内容包括用电开户申请书范文,农村电表开户申请书怎么写,农村新建房用电开户申请书怎么写,申请人是户主还是户口本的其他成。申请人须是户主。《供电营业规则》第十八条规定(1)用户申请新装或增加用电

知识

在工作表现方面怎么写

阅读(279)

本文主要为您介绍在工作表现方面怎么写,内容包括单位对员工工作表现该怎么写,工作表现怎么写,员工工作表现怎么写。要体现出单位对该员工的观察,和关怀。尽量务实走心着写。格式可以为:该员工怎样,并突出他的优点,在工作中任劳任怨、勤勤恳恳、

知识

between的音标怎么写

阅读(250)

本文主要为您介绍between的音标怎么写,内容包括between怎么发音,between怎么读,在两者之间的音标怎样写。between,读音:英 [bɪtwiːn] 美 [bɪtwiːn] prep. 在 之间adv. 在中间词汇搭配:come betw

知识

chan礼物怎么写

阅读(217)

本文主要为您介绍chan礼物怎么写,内容包括最美好的礼物日记怎么写,日语翻译生日快乐,求大神翻译。我个人觉得,写 最美好的礼物 可以从这个礼物给你启示或是感悟写起,也可以写这个礼物在你实际生活当中的作用,像是给你带来的喜悦,带来的乐趣

知识

javasqlselect语句怎么写

阅读(249)

本文主要为您介绍javasqlselect语句怎么写,内容包括javaselect语句怎么写,javasql数据库查询语句怎么写,怎么用Java写程序模拟数据库的select语句功能。使用java的jdbc来连接数据库如连接mysql(其余数据库类似),引入mysql-connector-java-5.1.

知识

大花英语单词怎么写

阅读(287)

本文主要为您介绍大花英语单词怎么写,内容包括大花用英语怎么写,花的英文单词怎么写,花的英语单词怎么写。写flower。 花,常被称为花朵,是被子植物(被子植物门植物,又称有花植物或开花植物)的繁殖器官,其生物学功能是结合雄性精细胞与雌性卵

知识

c语言怎么写1-99

阅读(245)

本文主要为您介绍c语言怎么写1-99,内容包括用c语言怎么编写1009998971,C语言如何实现顺序输出1到99,c语言程序,怎样写把所有奇数199的数全部加起来,这个程序怎么写呢。

知识

重载函数怎么写

阅读(243)

本文主要为您介绍重载函数怎么写,内容包括怎样写重载的函数,c语言怎么写重载函数,编写重载函数。函数重载就是要求,函数的名字相同(例如这里边的myprint),而参数不同,主要包括,参数个数不同,或者,参数的类型不同,但是返回类型不

知识

matlab限幅函数怎么写

阅读(302)

本文主要为您介绍matlab限幅函数怎么写,内容包括matlab函数的输出怎么限幅,比如y=x+5,我想让当y大于10时,y=10,matlab中函数应该怎么写,matlab中radon函数是怎样写的。r=radon(im,30);%im是图像矩阵解决方法如下:Radon 变换是平行束对图像的

知识

清的英文怎么写语言

阅读(299)

本文主要为您介绍清的英文怎么写语言,内容包括清字给个英文翻译,清的英文缩写,姓朱名世清的英文字母怎么写。彻底清除的英文: clean complete完全的英语:complete读音:英 [kəmpliːt] 美 [kəmpliːt] 释义

知识

德语中的语言怎么写

阅读(389)

本文主要为您介绍德语中的语言怎么写,内容包括语言,用德语怎么写,”我喜欢你”各国语言写法,找下52种语言怎么写我爱你。英 语:i love you 法 语:je taime,je tadore 德 语:ich liebe dich 希 腊语:sag

知识

一篇语言故事怎么写

阅读(256)

本文主要为您介绍一篇语言故事怎么写,内容包括一篇《寓言故事》作文怎么写,写一篇寓言故事,写一篇关于语言的故事。寓言故事---老虎的皇冠哪去了一天,老虎大王丢了一个价值连城的王冠,他怒火冲天,急急忙忙地找到了小兔子、狡猾的狐狸、还有沉

知识

c语言实验小结怎么写

阅读(267)

本文主要为您介绍c语言实验小结怎么写,内容包括C语言程序设计实验报告怎么写,C语言实验报告总结,C语言的实验报告如何写。通过本试验初步培养计算机逻辑解题能力。熟练掌握赋值语句和if语句的应用;掌握switch多路分支语句和if嵌套语句的使用

知识

荷兰语言英语怎么写

阅读(354)

本文主要为您介绍荷兰语言英语怎么写,内容包括荷兰用英语怎么说,荷兰用英文怎么说,荷兰英文怎么写。荷兰语发音-单元音 1。a- 荷兰语学习发音介于duck和dock之间,例如:pak(小包,包裹), plat(小块地,地图) 2。aa

[/e:loop]