用栈的方式实现递归调用(以n的阶乘为例)
来源:互联网 发布:姚明nba前几场比赛数据 编辑:程序博客网 时间:2024/05/20 23:56
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
#define ERROR 0
#define right 1
typedef int SType;
typedef int Status;
typedef struct Stack
{
SType *top;
SType *base;
int stacksize;
}Stack;
// 构造空栈Stack
Status Initstack(Stack &S)
{
if (!(S.base = (SType *)malloc(STACK_INIT_SIZE * sizeof (SType))))
return ERROR; // 存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return right;
}
/* 输入栈元素 */
Status Push(Stack &S, SType e){
if (S.top - S.base >= S.stacksize)
{
S.base = (SType *)realloc(S.base, //原栈底指针
(S.stacksize + STACK_INCREMENT) * sizeof (SType));
if (!S.base)
return ERROR; // 存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACK_INCREMENT;
}
*S.top++ = e;
//先把e压入栈顶,S.top再增1指向栈顶元素e的下一个位置
return right;
}
/* 栈是否是空的 */
Status StackEmpty(Stack S)
{
if (S.top == S.base)
return right;
else
return ERROR;
}
/* 删除栈顶元素*/
Status Pop(Stack &S, SType &e)
{
if (S.top == S.base)
return ERROR;
e = *--S.top;
return right;
}
void fact(int N){
int sum = 1;
Stack S;
SType e;
Initstack(S);
while (N){
Push(S, N);
N--;
}
while (!StackEmpty(S))
{
sum *= *(S.top - 1);
Pop(S, e);
}
printf("result is %d\n", sum);
}
void main()
{
int n;
printf("请输入n的阶数\n");
scanf_s("%d", &n);
fact(n);
}
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
#define ERROR 0
#define right 1
typedef int SType;
typedef int Status;
typedef struct Stack
{
SType *top;
SType *base;
int stacksize;
}Stack;
// 构造空栈Stack
Status Initstack(Stack &S)
{
if (!(S.base = (SType *)malloc(STACK_INIT_SIZE * sizeof (SType))))
return ERROR; // 存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return right;
}
/* 输入栈元素 */
Status Push(Stack &S, SType e){
if (S.top - S.base >= S.stacksize)
{
S.base = (SType *)realloc(S.base, //原栈底指针
(S.stacksize + STACK_INCREMENT) * sizeof (SType));
if (!S.base)
return ERROR; // 存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACK_INCREMENT;
}
*S.top++ = e;
//先把e压入栈顶,S.top再增1指向栈顶元素e的下一个位置
return right;
}
/* 栈是否是空的 */
Status StackEmpty(Stack S)
{
if (S.top == S.base)
return right;
else
return ERROR;
}
/* 删除栈顶元素*/
Status Pop(Stack &S, SType &e)
{
if (S.top == S.base)
return ERROR;
e = *--S.top;
return right;
}
void fact(int N){
int sum = 1;
Stack S;
SType e;
Initstack(S);
while (N){
Push(S, N);
N--;
}
while (!StackEmpty(S))
{
sum *= *(S.top - 1);
Pop(S, e);
}
printf("result is %d\n", sum);
}
void main()
{
int n;
printf("请输入n的阶数\n");
scanf_s("%d", &n);
fact(n);
}
阅读全文
0 0
- 用栈的方式实现递归调用(以n的阶乘为例)
- 用递归算法实现n的阶乘
- 递归实现n的阶乘
- 递归实现n的阶乘
- N的阶乘(递归)
- 递归n的阶乘
- 递归 n的阶乘
- 递归n的阶乘
- 递归---n的阶乘
- n的阶乘,循环和递归实现
- C++ 递归实现n的阶乘
- 以二叉树的前序遍历为例,递归和非递归方式的实现
- 编写递归函数求出n的阶乘(自定义main函数,调用定义的递归函数)
- 递归和非递归分别实现求n的阶乘
- 递归和非递归分别实现求n的阶乘
- Day6.16 C语言简单递归调用:用递归法求N的阶乘
- 求递归的方式求n的阶乘
- #DayOne#,分别用循环和递归的方式实现阶乘
- spring入门(注解实现Bean的定义)
- ubuntu opencv多版本控制
- 两个队列实现一个栈
- [一天几个linux命令] 改变文件所属用户组,所有者 chgrp chown
- SAP HANA Odata报错500 Internal Server Error
- 用栈的方式实现递归调用(以n的阶乘为例)
- Java创建对象的方法清单 —— 原来还可以这样创建对象
- 搭建hibernate 环境
- Shell中的变量
- 1437 [CA1006]The area of triangle
- bzoj3048[Usaco2013 Jan]Cow Lineup 单调队列
- IMWeb提升营Day4 | 训练题20:包含min函数的栈
- ubuntu14.04下Qt5.8的安装
- Java关键词解读之abstract