利用棧實現遞迴函式的非遞迴計算
阿新 • • 發佈:2018-12-11
題目描述: 棧的實現及棧的基本操作:
#include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<cstring> #define max 50; typedef char type; typedef struct { type data[50]; int top; }stack; void initialstack(stack *s) { s->top = 0; } int push(stack *s, type x) { if (s->top == 50) return -1; s->data[s->top++] = x; return 0; } type pop(stack *s) { if (s->top == 0) return -2; type x = s->data[--s->top]; return x; }
題目解答:
int count3() {//基本思想:由P0,P1的值可以直接得到P2的值,根據P1,p2的值可以得到P3的值,依次類推 int n, x; stack *s1 = (stack *)malloc(sizeof(stack)); initialstack(s1); scanf_s("%d %d",&n,&x); if (n == 0) return 1; else if (n == 1) return 2 * x; else { for (int i = 0; i <=n;i++) { if (i == 0) push(s1, 1); else if (i == 1) push(s1, 2*x); else { int tem1 = pop(s1); int value = 2 * x*tem1 - 2 * (i - 1)*pop(s1);//當i=2時,出P0,P1的值,算出P2的值,再將P1,P2的值進棧方便算P3的值 printf("value:%d ", value); //最先出棧的值應儲存下來,與計算出來的新值先後壓入棧; push(s1, tem1); push(s1, value); } } } return 2 * x*pop(s1) - 2 * (n - 1)*pop(s1);//最後棧頂的值分別是Pn-1與Pn-2 }