首页 > 解决方案 > n个自然数的递归和

问题描述

计算n个自然数之和的函数

int solve(int n)
{
    if(n==0 or n==1)
    return n;
    int sum=0;

    sum=sum+n;
    solve(n-1);   // gives me wrong output

    return sum;
}

int solve(int n)
{
    if(n==0 or n==1)
    return n;
    int sum=0;

    sum=sum+solve(n-1);  // gives me correct output

    return sum;
}

作为调用堆栈的函数的工作或输出有什么区别在这两种情况下都是一样的

标签: c++recursioncallstackfunction-definition

解决方案


solve第一种方法中的函数对您的程序没有任何影响

int solve(int n)
{
    if(n==0 or n==1)
    return n;
    int sum=0;

    sum=sum+n;
    solve(n-1);   // has not any effect

    return sum;
}

在第二种方法中,返回值将始终为 1,而它必须返回数字的总和,计算数字总和的正确代码是:

int solve(int n)
{
    if (n == 0 || n == 1)
        return n;

    int sum = 0;

    sum = n + solve(n - 1);  // change 'sum' with 'n'

    return sum;
}

跑:

solve(5);

输出:

5 + 4 + 3 + 2 + 1 = 15


推荐阅读