非递归函数的递归求解
2010-05-29 12:34
246 查看
[code] #include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
typedefint ElemType;
typedef struct{
ElemType *base;
ElemType *top;
int stacksize;
} sqStack;
/*初始化栈*/
void initStack(sqStack *s)
{
/*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
if(!s->base) exit(0);/*分配空间失败*/
s->top = s->base;/*最开始,栈顶就是栈底*/
s->stacksize = STACK_INIT_SIZE; /*最大容量为STACK_INIT_SIZE */
}
/*入栈操作,将e压入栈中*/
void Push(sqStack *s, ElemType e){
if(s->top - s->base >= s->stacksize){
/*栈满,追加空间*/
s->base = (ElemType *)realloc(s->base, (s->stacksize +
STACKINCREMENT) * sizeof(ElemType));
if(!s->base) exit(0);/*存储分配失败*/
s->top = s->base + s->stacksize;
s->stacksize = s->stacksize + STACKINCREMENT;/*设置栈的最大容量*/
}
*(s->top) = e; /*放入数据*/
s->top++;
}
/*出栈操作,用e将栈顶元素返回*/
void Pop(sqStack *s , ElemType *e){
if(s->top == s->base) return;
*e = *--(s->top);
}
int f(int n)
{
int r = 1, e;
sqStack stack;
initStack(&stack);/*初始化栈*/
while(n != 0){
Push(&stack, n);/*保存现场n*/
n = n / 2;
}
while(stack.top != stack.base)
{
Pop(&stack, &e);
r = r * e;
}
return r;
}
int main()
{
printf("The result for conversion of recursion to non recursion is\n");
printf("f(5)=%d \n", f(5));
return 0;
}[/code]
相关文章推荐
- 第十二周项目3-用递归方法求解(3)用递归函数求两个数的最大公约数
- 第十二周训练——(2)写出求1*3*...*n的递归形式,并编写出递归函数求解
- 第十二周 项目三-用递归方法求解-(3)用递归函数求两个数的最大公约数
- LeetCode 110. Balanced Binary Tree 递归求解
- LeetCode OJ Minimum Depth of Binary Tree 递归求解
- 深度优先—递归方法 求解n皇后问题
- 学习C/C++语言:递归求解hanoi汉诺塔问题
- 数独游戏求解(递归+回溯)
- 第四周项目5.4-用递归方法求解
- php递归使用示例(php递归函数)
- 第四周项目五-用递归方法求解(用递归求出两个数的最大公约数)
- 第4周项目5 (2) 用递归方法求解
- 第三周项目5—用递归求解
- 第四周项目4:用递归方法求解
- 汉诺塔问题的递归求解
- 第四周项目5-用递归方法求解(4)
- 第4周项目5-用递归方法求解(2)
- 第四周项目五递归方法求解
- 求解二叉树的深度(递归和非递归)
- Java经典编程300例之实例047 汉诺塔问题求解(递归)