zoukankan      html  css  js  c++  java
  • 非递归函数的递归求解

       1: #include <stdio.h>
       2: #include <math.h>
       3: #include <stdlib.h>
       4: #define STACK_INIT_SIZE 20
       5: #define STACKINCREMENT 10
       6:  
       7: typedef  int ElemType;
       8: typedef struct {
       9:     ElemType *base;
      10:     ElemType *top;
      11:     int stacksize;
      12: } sqStack;
      13: /*初始化栈*/
      14: void initStack(sqStack *s)
      15: {
      16:     /*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/
      17:     s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
      18:  
      19:     if(!s->base) exit(0);                /*分配空间失败*/
      20:  
      21:     s->top = s->base;                /*最开始,栈顶就是栈底*/
      22:     s->stacksize = STACK_INIT_SIZE;     /*最大容量为STACK_INIT_SIZE */
      23: }
      24: /*入栈操作,将e压入栈中*/
      25: void Push(sqStack *s, ElemType e) {
      26:     if(s->top - s->base >= s->stacksize) {
      27:         /*栈满,追加空间*/
      28:         s->base = (ElemType *)realloc(s->base, (s->stacksize +
      29:                                                 STACKINCREMENT) * sizeof(ElemType));
      30:  
      31:         if(!s->base) exit(0);                                /*存储分配失败*/
      32:  
      33:         s->top = s->base + s->stacksize;
      34:         s->stacksize = s->stacksize + STACKINCREMENT;        /*设置栈的最大容量*/
      35:     }
      36:  
      37:     *(s->top) = e;                                             /*放入数据*/
      38:     s->top++;
      39: }
      40: /*出栈操作,用e将栈顶元素返回*/
      41: void Pop(sqStack *s , ElemType *e) {
      42:     if(s->top == s->base) return;
      43:  
      44:     *e = *--(s->top);
      45: }
      46:  
      47: int f(int n)
      48: {
      49:     int r = 1, e;
      50:     sqStack stack;
      51:     initStack(&stack);                /*初始化栈*/
      52:  
      53:     while(n != 0) {
      54:         Push(&stack, n);            /*保存现场n*/
      55:         n = n / 2;
      56:     }
      57:  
      58:     while(stack.top != stack.base)
      59:     {
      60:         Pop(&stack, &e);
      61:         r = r * e;
      62:     }
      63:  
      64:     return r;
      65: }
      66:  
      67: int main()
      68: {
      69:     printf("The result for conversion of recursion to non recursion is\n");
      70:     printf("f(5)=%d \n", f(5));
      71:     return 0;
      72: }
  • 相关阅读:
    Vue 踩坑-2 vue文件中style的scoped属性
    IIS发布Vue项目F5刷新404问题
    .NET Core 3.1 + Hangfire 配置以及踩坑
    Vue 踩坑-1-跨域问题
    Docker 部署VUE项目
    (转)如何利用EnteLib Unity Interception Extension 和PIAB实现Transaction的Call Handler
    Unity 中的策略注入(转)
    面向方面的编程、侦听和 Unity 2.0(转)
    Unity 中的拦截功能(转)
    [转]推荐分享22个优秀的项目管理与协作工具
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1746965.html
Copyright © 2011-2022 走看看