递归的定义与使用
时间:2019-09-20
本文章向大家介绍递归的定义与使用,主要包括递归的定义与使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、定义是递归的:
(1)n!的递归实现:
递归方法:
public class Method { int fun(int n){ if(n==1) return 1; else return(fun(n-1)*n); } }
public class RecursionDemo { public static void main (String[] args){ Method m=new Method(); int num=m.fun(3); System.out.println(num); } }
递归方法分析:
(1)该方法是直接递归,即自己调用自己。
例如:在执行fun(3)的时候,先执行fun(2)*3,而fun(2)=fun(1)*2,fun(1)=1。
(2)递归过程将问题的规模逐步缩小,参数的大小每次减1。一个个重复的过程,通过调用自身,减少了代码量。
(3)因为递归调用语句是在最后一句,因此,这种递归方式也称为尾递归。
2、数据结构是递归的:
单链表的存储结构定义。
3、问题的求解是递归的:
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OVERFLOW -2 #define ERROR 0 #define OK 1 typedef int ElemType; typedef struct{ //存储结构 ElemType *elem; //指针类型 int length; int listsize; }SqList;//顺序表的结构类型 typedef int Status; Status InitList(SqList &L){ L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//动态分配存储空间 if(!L.elem) exit(OVERFLOW); //分配失败退出 L.length=0; //空表 L.listsize=LIST_INIT_SIZE; //初始存储容量 return OK; } Status ListInsert(SqList &L,int i,ElemType e){//在第 i 个元素前插入一个新的元素e if(i<1 || i > L.length+1) return ERROR; //i值不合法 if(L.length>=L.listsize) //存储空间不足 { ElemType * newbase=(ElemType *)realloc(L.elem,(LIST_INIT_SIZE+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); //分配失败 L.elem=newbase; L.listsize=LIST_INIT_SIZE+LISTINCREMENT; } for (int j=L.length; j>=i; --j) L.elem[j]=L.elem[j-1]; L.elem[i-1]=e; L.length++; return OK; } Status ListEmpty(SqList L){ //判断顺序表是否为空 return L.length == 0; } Status ListPrint(SqList &L) { printf(" 顺序表为: "); if (ListEmpty(L)) { printf(" 空。 \n"); return ERROR; } for (int i=0; i<L.length; ++i) { printf("%-4d ", L.elem[i]); } printf("\n"); return OK; } int Sum(SqList L,int i){ if(i==L.length) return 0; else return(L.elem[i]+Sum(L,i+1)); } main(){ SqList L; ElemType e; int i,j; InitList(L); printf(" 请输入你想创建的顺序表中元素的个数: "); scanf("%d",&i); if(i<1) printf(" 您输入的值有误,无法创建顺序表。 \n"); else { printf(" 请您依次输入您想创建的顺序表的元素: "); for(j=1;j<=i;j++) { scanf("%d",&e); ListInsert(L,L.length+1,e); //尾插 } } ListPrint(L); //遍历顺序表 int result=Sum(L,0); printf( "顺序表所有元素的和为:%d",result); }
这个程序是求解顺序表的元素的和,从顺序表的第一个元素开始,依次向后查找元素,并进行求和运算。
原文地址:https://www.cnblogs.com/zhai1997/p/11552938.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- .Net Core微服务入门全纪录(八)——Docker Compose与容器网络
- PHP中少用但是很好用的方法
- 使用一维数据构造简单卷积神经网络
- .Net Core微服务入门全纪录(完结)——Ocelot与Swagger
- PHP使用GD库生成文件
- 反向传播算法从原理到实现
- 基于EntityFramework 6 Code First实现多租户的一种思路
- PHP使用GD库生成柱状图
- PHP生成Mysql数据字典
- .Net Core in Docker极简入门(上篇)
- PHP一个比较完善的树形结构代码
- .Net Core in Docker极简入门(下篇)
- snoopy(强大的PHP采集类) 详细介绍
- 十分钟搭建自己的私有NuGet服务器-BaGet
- PHP遍历文件夹下的所有文件和文件夹