递归和非递归实现规律函数

简介: 递归和非递归实现规律函数

1、问题

A(n) = n / (2 * n + 1)

B1 = 2 + A1;

B2 = 2 + A1 * (2 + A2);

B3 = 2 + A1 * (2 + A2 * (2 + A3));

....以此类推,求B(n)

2、代码实现

#include <stdio.h>
/** 
A(n) = n / (2 * n + 1)
B1 = 2 + A1;
B2 = 2 + A1 * (2 + A2);
B3 = 2 + A1 * (2 + A2 * (2 + A3));
....以此类推,求B()
**/
float A(float n) 
{
  if (n < 0)
    return 0;
  float result = n / (2 * n + 1);
  return result;
}
//非递归实现
float B(float n)
{
  if (n < 0)
    return 0;
  float sum = 1;
  for (int i = n; i >= 1; --i) 
  {
    sum = sum * A(i) + 2;
  }
  return sum;
}
//递归实现
float recursion_B(float n) 
{
  if (n < 0)
    return 0;
  static float sum = 1;
  if (n == 0)
    return sum;
  else 
  {
    sum = sum * A(n) + 2;
    recursion_B(n - 1); 
  }
}
int main()
{
  for (int i = 0; i < 20; i++)
    printf("B(%d) is %f\n", i, B(i));
  printf("recursion_B(10) is %f\n",  recursion_B(10));
}

3、运行结果

B(0) is 1.000000
B(1) is 2.333333
B(2) is 2.800000
B(3) is 2.990476
B(4) is 3.073016
B(5) is 3.109957
B(6) is 3.126829
B(7) is 3.134643
B(8) is 3.138300
B(9) is 3.140024
B(10) is 3.140842
B(11) is 3.141232
B(12) is 3.141419
B(13) is 3.141509
B(14) is 3.141552
B(15) is 3.141573
B(16) is 3.141583
B(17) is 3.141588
B(18) is 3.141591
B(19) is 3.141592
recursion_B(10) is 3.140842
相关文章
|
3月前
利用递归方法求5!
利用递归方法求5!.
23 9
|
2月前
|
算法 定位技术
数据结构与算法学习九:学习递归。递归的经典实例:打印问题、阶乘问题、递归-迷宫问题、八皇后问题
本文详细介绍了递归的概念、重要规则、形式,并展示了递归在解决打印问题、阶乘问题、迷宫问题和八皇后问题等经典实例中的应用。
53 0
|
4月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
110 0
|
6月前
|
算法
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
数据结构和算法学习记录——时间复杂度的计算(嵌套循环、大O的渐进表示法、双重循环、常数循环、strchr、冒泡排序、二分查找、斐波那契数列递归)
492 1
|
6月前
|
算法 C语言
汉诺塔问题(函数递归)
汉诺塔问题(函数递归)
75 0
|
7月前
|
Java Python
汉诺塔递归问题,递归思路详解
汉诺塔递归问题,递归思路详解
120 0
|
7月前
|
机器学习/深度学习
利用函数递归求汉诺塔问题
利用函数递归求汉诺塔问题
63 0
算法学习--递归斐波那契数
算法学习--递归斐波那契数
|
C++ C语言
你是真的“C”——函数递归详解汉诺塔
利用函数递归手把手求解汉诺塔
112 0
你是真的“C”——函数递归详解汉诺塔
|
算法
【递归与递推 3】AcWing 717. 简单斐波那契(求解斐波那契数列的若干方法)
【递归与递推 3】AcWing 717. 简单斐波那契(求解斐波那契数列的若干方法)
104 0
【递归与递推 3】AcWing 717. 简单斐波那契(求解斐波那契数列的若干方法)