c++ - 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;
}
作为调用堆栈的函数的工作或输出有什么区别在这两种情况下都是一样的
解决方案
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
推荐阅读
- python - 将系列转换为诊断数据框,所有其他元素为零
- azure - Azure 订阅标签:如何删除空标签值?
- javascript - 将字体系列与字体名称节点 js 分开
- codenameone - 代号为一的内存数据库
- java - Java的--add-export在jlinking期间没有效果
- java - Spring Boot JacksonTester 自定义序列化程序未注册
- javascript - 比较文章和按钮的数据
- wpf - 使代码在 Sync VB.net 中执行 | WPF
- jquery - .addClass 不适用于单个 Span
- angular - 构建时出错:模块导出的意外值 null