c - 显示递归的模拟,给定递归算法

标签 c recursion

以下 C 语言程序将 n 作为输入,并使用递归求出直到第 n 项的级数之和。该系列如下: (1 x 3) + (2 x 5) + (4 x 7) + (8 x 9) + ... + 第 n 项

这是我的代码:

#include <stdio.h>
#include <math.h>
int addNumbers(int n);
int main(){
    int n;
    printf("Enter a positive integer n: ");
    scanf("%d", &n);
    printf("Sum = %d", addNumbers(n));
    return 0;
}

int addNumbers(int n){
    if (n>0)
        return pow (2, n-1)*(2*n+1)+addNumbers(n-1);
    else
        return n;
}

如何在我的代码中显示 n=5 的递归模拟?

最佳答案

在返回 pow(2, n-1)*(2*n+1)+addNumbers(n-1) 操作之前,您可以打印以获得模拟。由于这里使用递归自上而下的过程,因此您的模拟也会影响自上而下的方法。

#include <stdio.h>
#include <math.h>
int addNumbers(int n)
{
    if (n>0){
        int a=pow(2,n-1);
        int b=2*n+1;
        if(n>1)
            printf("(%d x %d) + ",a,b);
        else
            printf("(%d x %d)\n",a,b);
        return pow(2, n-1)*(2*n+1)+addNumbers(n-1);

    }
    else
        return n;
}
int main()
{
    int n;
    printf("Enter a positive integer n: ");
    scanf("%d", &n);
    printf("Sum = %d", addNumbers(n));
    return 0;
}

输出

Enter a positive integer n: 5
(16 x 11) + (8 x 9) + (4 x 7) + (2 x 5) + (1 x 3)
Sum = 289

如果你想获得自下而上的逼近模拟,请遵循此操作。

int sum=0,tmp;
int addNumbers(int n)
{
    if (n>0){
        sum+=pow(2, n-1)*(2*n+1)+addNumbers(n-1);
        int a=pow(2,n-1);
        int b=2*n+1;
        if(tmp==n)
            printf("(%d x %d)\n",a,b);
        else
            printf("(%d x %d)+ ",a,b);
    }
    return sum;
}
int main()
{
    int n;
    printf("Enter a positive integer n: ");
    scanf("%d", &n);
    tmp=n;
    printf("Sum = %d\n", addNumbers(n));
    return 0;
}

输出

Enter a positive integer n: 5
(1 x 3)+ (2 x 5)+ (4 x 7)+ (8 x 9)+ (16 x 11)
Sum = 289

关于c - 显示递归的模拟,给定递归算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65678240/

相关文章:

c - 为什么在每次写入之前打开文件并在每次写入之后立即关闭它不是一个好主意?

c - 在 c 中用分隔符连接字符串

javascript - 递归回调

javascript - 尝试理解 JS 中的递归...检查我的简单代码

javascript - Javascript 中的递归不起作用(CodeWars 问题)

Java递归方法一次打印字符串中的一个单词而不循环

list - 有人可以用我的 Haskell 代码诊断问题吗?

c - c中的二分法程序为什么我需要在if语句之前?

c - 如何在宏中编写这样的 if 条件?

c - 带有 char* 的结构数组不会 printf() 正确吗?