当前位置:   article > 正文

利用栈实现递归函数的非递归计算

用栈实现递归函数的非递归计算

题目描述:利用一个栈来实现递归函数的非递归计算。

 递归函数:

算法设计思想:

       第一步:为递归函数设计一个结构体(Func_val)用于保存函数的n和Pn(x)的值。

       第二步:定义一个栈(stack),用于保存递归函数中的n个数据(Func_val类型)。  注:栈stack保存递归函数中从2 到 n的数据 

       第三步:边出栈边计算Pn(x)的数值(出栈时n从2到n),当栈为空时就计算出了Pn(x)的值。

算法代码:

  1. typedef struct Func_val{
  2. int no;
  3. double val;
  4. }Func_val; // 为递归函数创建数据类型,方便存储
  5. double calculate_val(int n,double x){
  6. Func_val *stack=(Func_val*)malloc(sizeof(Func_val)); //开辟大小为n的栈,栈中存放Func_val数据类型的值
  7. int top = -1; //栈顶指针
  8. double f0, f1; //初始时表示n为0和1时的值
  9. f0 = 1;
  10. f1 = 2 * x;
  11. for (int i = n; i >=2; i--){ //递归函数n个数值依次入栈
  12. top++;
  13. stack[top].no = i;
  14. }
  15. while (top!=-1) //边出栈边计算数值
  16. {
  17. stack[top].val = 2 * x*f1 - 2*(stack[top].no-1) * f0;
  18. f0 = f1; //f0,f1保存本次中n-2和n-1项的值
  19. f1 = stack[top].val;
  20. top--; //出栈
  21. }
  22. if (n == 0){
  23. return f0;
  24. }
  25. else
  26. return f1; //栈空时Pn(x)值计算出来,赋值给f1
  27. }

程序完整代码:

  1. //递归函数非递归计算
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<iostream>
  5. using namespace std;
  6. typedef struct Func_val{
  7. int no;
  8. double val;
  9. }Func_val; // 为递归函数创建数据类型,方便存储
  10. double calculate_val(int n,double x){
  11. Func_val *stack=(Func_val*)malloc(sizeof(Func_val)); //开辟大小为n的栈,栈中存放Func_val数据类型的值
  12. int top = -1; //栈顶指针
  13. double f0, f1; //初始时表示n为0和1时的值
  14. f0 = 1;
  15. f1 = 2 * x;
  16. for (int i = n; i >=2; i--){ //递归函数n个数值依次入栈
  17. top++;
  18. stack[top].no = i;
  19. }
  20. while (top!=-1) //边出栈边计算数值
  21. {
  22. stack[top].val = 2 * x*f1 - 2*(stack[top].no-1) * f0;
  23. f0 = f1; //f0,f1保存本次中n-2和n-1项的值
  24. f1 = stack[top].val;
  25. top--; //出栈
  26. }
  27. if (n == 0){
  28. return f0;
  29. }
  30. else
  31. return f1; //栈空时Pn(x)值计算出来,赋值给f1
  32. }
  33. int main(){
  34. int n, x;
  35. double result;
  36. cout << "输入非递归函数的n,x:";
  37. cin >> n;
  38. cin >> x;
  39. result= calculate_val(n, x);
  40. cout << "\n" << "结果为:" << result;
  41. system("pause");
  42. return 0;
  43. }

运行结果:

当n=3,x=2时,函数计算结果为40。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/952499
推荐阅读
相关标签
  

闽ICP备14008679号