递归函数怎么写

1.如何写递归函数

递归函数,是指某一函数内部自己直接或间接地调用自己,即直接递归和间接递归。是语言中比较高级的技术用法。

递归函数之所以难,是因为是一种过于抽象化的技术

写代码的时候无法直观的看出逻辑是否符合自己要求,因此想一次性写好递归函数,是一件很困难的事情,必须要程序运作起来执行递归函数的代码才能看出是否正确,而且进行测试的难度也很高,有时的隐含bug可能要软件上线后才会渐渐体现出来。

首先,

要分析清楚满足递归的条件,并一一列出。

其次,

要分析不满足条件时的处理方式。

在列出了所有条件后,我们自然还要考虑不满足条件后的结果,一种是业务本身要求的不满足条件后的处理,另一种就是出现错误时候的处理。说的简单点,就是正确的情景考虑到了后还要考虑错误的情景。

接下来,

要分析递归函数的返回值。

最后,

写完递归函数后一定要进行单元测试,测试也要有方法。

因此难以保障一次写完后正确性,所以写完后一定要测试,递归函数本身测试也很麻烦,递归次数少倒还好,递归次数一旦多的话就很头疼。这时我们可以将循环的次数,以及递归的后的结果打印出来,看看打印后的结果是否符合自己的预期,如果某一递归出现问题,可以根据循环次数的记录在调试的时候直接定位,这样效率会高很多,也容易很多,要不然一步步调试看,实在是折磨人。测试的时候一定要涉及到所有满足递归的条件,每一条件分支都要检查一遍,这样才是较为全面的测试递归的方法。

写递归函数,不是一下两下能搞定的事情,本身就是一个反复性工作,编写→测试→编写→测试→。,所以在分析、编写的时候一定要静心、细心,不要急躁,这样渐渐的递归函数也就健全起来。头几次写递归函数可能写不好,日后多多练习便会慢慢深刻体会到递归的精髓。

那么我想说的也说完了,希望这篇文章能对大家有帮助。

2.怎么编写一个递归函数

#include

unsigned long power( unsigned int q,unsigned int n );

int main()

{

unsigned int number;

unsigned int n;

printf( "输入你的底数: " );

scanf( "%d", &number );

printf( "输入你的次数: " );

scanf( "%d", &n );

printf( "%d\n", power( number, n ) );

return 0;

}

unsigned long power( unsigned int q,unsigned int n )

{

int s = 1;

s = q * s;

if( n == 0 )

{

return 1;

}

if( n == 1 )

{

return q;

}

else

{

return q * power( q, --n );

}

}

3.递归函数的例子

这个行吗:

求1+2+……+100的和

先分析一下。第一递归变量的问题,从题目上看应该取1,2,……,100这些变量的值作为递归的条件;第二就是如何终止的问题,从题目上看应该是当数为100的时候就不能往下加了。那么我们试着写一下程序。

int add(int);

main()

{

int num=1,sn;

sn=add(num);

printf("%d\n",sn);

getch();

}

int add(int num)

{

static int sn;

sn+=num;

if(num==100) return sn;

add(++num);

}

分析一下程序:前调用add(1),然后在子函数中把这个1加到sn上面。接着调用add(2),再把sn加2上来。这样一直到100,到了100的时候,先加上来,然后发现满足了if条件,这时返回sn的值,也就是1+2+……+100的值了。

4.什么是递归函数

递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。

当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。

所以递归要有两个要素,结束条件与递推关系。

递归有两个基本要素:

(1)边界条件:确定递归到何时终止,也称为递归出口。

(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果

在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。

一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:

(1)运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;

(2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;

(3)每次递归调用结束后,将栈顶元

扩展资料:

递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。说白了,还是函数调用。既然是函数调用,那么就有一个雷打不动的原则:所有被调用的函数都将创建一个副本,各自为调用者服务,而不受其他函数的影响。

你的ff函数,递归多少次,就有多少个副本,再利用内存的栈式管理,反向退出。这个最好找一下“栈”这方面的东西看看,挺容易的,就像子弹匣一样,先进后出。

从某种意义上说,这是不对的,因为就像刚才说的,一旦被调用,他将在内存中复制出一份代码,再被调用就再复制一份,换句话说,你可以吧同一个函数的多次调用理解称谓多个不同函数的一次调用,这样也会会简单些。

再说=1和=0是为什么退出。递归,很需要注意的就是死递归,也就是说,某一个函数进入了无限调用自身的情况,永无止境地消耗内存等资源,这在编程方面是一大忌。

但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码,否则必定死递归。ff函数中,那个else就是返回的出口,你可以这样想,如果没有那个if来进行判断,你递归到什么时候算完?ff是不是会一直调用自己。

因为一旦某个函数A中调用了函数B(或者自己),那么A中的代码会停在调用的位置,而转向B中去执行,同理,如果B又调用函数C,那么B又停在调用的位置,去执行C,如果无限调用,那么程序是永远不会结束的。

当然,也有这种情况,A调用B,然后继续自己的代码,不管B的死活,这种不在我们的讨论范围内,因为那牵扯到另一种编程方式:多线程。

参考资料:搜狗百科——递归函数

5.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));

}

递归函数怎么写

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

知识

mba开题报告怎么写

阅读(216)

本文主要为您介绍mba开题报告怎么写,内容包括如何撰写MBA毕业论文及开题报告,MBA论文开题报告中的文献综述怎么写,MBA论文开题报告。论文题目是《降低成本、费用措施与途径》的开题报告由于开题报告是用文字体现的论文总构想,因而篇幅不必过

知识

怎么写要求供应商降价联络函

阅读(235)

本文主要为您介绍怎么写要求供应商降价联络函,内容包括怎么写要求供应商降价联络函,急求对供应商降价要求的联络函,降价函怎么写。联系函关于2014年采购物资价格的要求。*** ***公司:非常感谢贵公司在2013年对******公司不遗余力的支持。随

知识

文件相对路径怎么写

阅读(192)

本文主要为您介绍文件相对路径怎么写,内容包括相对路径怎么写,要具体的,什么是文件的相对路径怎么把文件路径改为相对路径,如何使用文件相对路径。??什么是相对路径?相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。

知识

小说人设怎么写

阅读(245)

本文主要为您介绍小说人设怎么写,内容包括小说人设怎么写,求一份超全的小说人设表格形式,怎么写小说里反派的人设。【背景】顾渊,故事主人公,爷爷是末法时代的灵气研究者,因为进行人体试验而被判刑,目前因为精神分裂症关在精神病院。他的父亲是

知识

项目经济指标怎么写

阅读(318)

本文主要为您介绍项目经济指标怎么写,内容包括项目申报书中的技术经济指标如何写项目是高新研究与发展项目搜,项目申报书中的技术经济指标如何写,经济指标怎么写。高新研究于发展项目,考核的重点是项目的创新性经济指标不像产业化项目,要求的

知识

小写字母按顺序怎么写

阅读(292)

本文主要为您介绍小写字母按顺序怎么写,内容包括26个小写字母正确顺序,26个大小写字母的先后顺序是怎样写的,大,小写字母按顺序怎么排列。需要看你朝哪方面排。英文小写:a b c d e f g h i j k l m n o p q r s t u v w x y z汉字

知识

榆树的作文怎么写

阅读(194)

本文主要为您介绍榆树的作文怎么写,内容包括描写榆树的作文应该怎么写呀,—篇有关写榆树的作文,榆树的作文怎么写5535744)ur r。“碧玉妆成一树高,万条垂下绿丝绦。不知细叶谁裁出,二月春风似剪刀。”当我吟诵起唐代大诗人贺知章的这首诗时,

知识

招标委托书怎么写

阅读(215)

本文主要为您介绍招标委托书怎么写,内容包括投标授权委托书范本,招标委托书,投标授权委托书范本。1. 致XXXXXXX: 本人作为________公司法定代表人,在此授权_____先生(女士)作为我公司正式合法的代理人,以我公司名义

知识

模块开发卷宗怎么写

阅读(192)

本文主要为您介绍模块开发卷宗怎么写,内容包括软件开发文档应该如何写,谁来帮我把这些翻译成英文要软件工程的专业翻译,专用软件的设计开发流程。模块开发卷宗(GB856788)1标题软件系统名称和标识符模块名称和标识符(如果本卷宗包含多于一个的

知识

行书传字怎么写

阅读(205)

本文主要为您介绍行书传字怎么写,内容包括“传”字的草书怎么写,书法里行书传字怎么写,“传”字的草书怎么写。“传”字草书写法:第一种:书家李怀琳,作品嵇康与山巨源绝交书。李怀琳是唐代洛阳人,生卒年不详,太宗时待诏文林馆。草书《嵇康与山巨

知识

晶用韩语怎么写

阅读(200)

本文主要为您介绍晶用韩语怎么写,内容包括晶用韩文怎么写,晶用韩语怎么写,有谁知道星晶用韩文怎么写。郑秀晶,这三个字。都可以在我的韩国朋友中找得到,而且我本人也姓郑。您的问题中韩语,显示的是乱码,但正确的翻译应该是"정수정"。按照您的描

知识

股东简介怎么写

阅读(226)

本文主要为您介绍股东简介怎么写,内容包括公司股东及简介如何写呢(办理银行授信业务),公司股东简介怎么写,公司简介怎么写。公司概况:这里面可以包括股东构成,注册时间,注册资本,公司性质,经营范围技术力量,规模,员工人数,员工素质等;2、公司发展状况:

知识

彼此英文怎么写

阅读(229)

本文主要为您介绍彼此英文怎么写,内容包括请问[彼此]英文怎么写高手指教哈谢谢,彼此彼此的英文怎么写,彼此,彼此英语怎么说,谢喽。mutual understanding或者to understand each other。重点词汇:mutual英 [ˈmju:tʃ

知识

护士业务专长怎么写

阅读(307)

本文主要为您介绍护士业务专长怎么写,内容包括护士个人简历业务专长及工作成果怎么写,护士个人专业特长怎么写,护士专长怎么写。教育经历:假如学习成绩较好,这边可以重点下护理心理学、护理学基础、外科护理学、内科护理学、妇产科护理学、儿

知识

c分段函数怎么写

阅读(281)

本文主要为您介绍c分段函数怎么写,内容包括c语言分段函数怎么写,c语言分段函数怎么写,C语言编程分段函数怎么写用两种方法。#include "stdio.h"#include "math.h"int main(int argc,char *argv[]){d

知识

cmain函数怎么写

阅读(178)

本文主要为您介绍cmain函数怎么写,内容包括怎样书写一个C语言程序的main函数,C语言怎么在main函数里写自定义函数,格式是怎么样的请举例,C语言的main函数。一般:main(){}最完整:int main(int argc,char* argv[]){}解释:main函数是运行程序时由

知识

java里的main函数怎么写

阅读(241)

本文主要为您介绍java里的main函数怎么写,内容包括java的main函数如何写,javamain函数里写什么,JAVA冒泡法的main函数怎么写。import java.io.*;//输入输出控制包class Maopao{ public static int[] maopao(i

知识

链表的主函数怎么写

阅读(214)

本文主要为您介绍链表的主函数怎么写,内容包括请问这个链表主函数怎么写(用C语言,可以从键盘输入n个数实现),链表的各函数在主函数中怎么联系起来,就是写的子函数在主函数中要,单链表,求最大值的算法中的主函数应该怎么写。哥们你这是数据结

知识

matlab中怎么写函数

阅读(272)

本文主要为您介绍matlab中怎么写函数,内容包括matlab怎么写函数文件~,matlab中函数应该怎么写,matlab如何输入函数。首先在电脑中打开baimatlab软件。

知识

excel根号函数怎么写

阅读(230)

本文主要为您介绍excel根号函数怎么写,内容包括Excel中根号怎么输入,如何在EXCEL表格里面输入根号公式,excel公式中开根号是哪一个函数啊。打开excel文档,点击空白单元格。

知识

r语言函数怎么写

阅读(216)

本文主要为您介绍r语言函数怎么写,内容包括R语言怎么写函数,r语言function怎么写,如何用R语言编写一些自己的函数。自带函数factorial(n),可以算正整数n的阶乘自带函数prod(x),可以算向量x的连乘,当x为1:n时即为阶乘5的阶乘5!可以

知识

函数单调区间怎么写

阅读(315)

本文主要为您介绍函数单调区间怎么写,内容包括函数的单调区间怎么写,解函数的单调区间的方法和步骤,求这个函数的单调区间~(写步骤)。单调性的定义及其三种表述方法:设有函数y = f(x) , ( X∈M ) (1)、首先根据函数图象的特点得出定义的图象语

[/e:loop]