c++ - 我的函数应该使用什么返回类型来打印斐波那契数字?
问题描述
我正在尝试编写一个函数来打印 x 和 y 范围之间的所有斐波那契数。我几乎拥有它,但我不知道该函数使用什么返回类型,genFib(int min, int max){
我认为 bool 是正确的,但是当我测试代码时,该行cout << genFib(5, 20) << endl;
打印5 8 13 0
在末尾添加零。我应该使用什么返回类型来避免最后出现零打印?这是我当前的所有代码。
#include <iostream>
#include <cmath>
using namespace std;
bool perfectSquare(int x){
int s = sqrt(x);
return (s*s == x);
}
bool isFibonacci(int n){
return perfectSquare(5*n*n + 4) ||
perfectSquare(5*n*n - 4);
}
bool genFib(int min, int max){
int newMax = 0, newMin = 0;
if(min > max){
newMax = min;
newMin = max;
}else{
newMax = max;
newMin = min;
}
cout << "Fib numbers: ";
for(int i = newMin; i <= newMax; i++)
if(isFibonacci(i)) cout << i << " ";
return false;
}
int main(){
cout << genFib(5, 20) << endl;
return 0;
}
解决方案
您看到的最后一个 0 在那里,因为您从 中返回 false genFib()
,然后打印它。因为您正在打印方法中的所有内容genFib()
,所以您不需要打印方法的结果,或者从它返回任何内容。如果您尝试以下操作,您将不会打印 的结果genFib()
,即您的尾随 0。
int main(){
int x = 372; // Simply a random number
genFib(5, 20);
return 0;
}
由于您也不关心 的返回值genFib()
,因此您应该返回void
而不是false
. 如果您打印该方法的结果,这将阻止打印任何内容。
推荐阅读
- xslt - InDesign 中的 XSLT node-set() 函数支持
- parsing - asar 档案的标题格式是怎样的?
- javascript - TS1127:将 Guid 传递给 js 方法时,剃须刀页面上的字符无效
- java - ArrayList 设置和获取使我的代码越界
- python - 删除python中的标点符号
- c - 取消引用 NULL 指针 - Visual Studio
- c# - 来自 Unity 的 SQL ServerConnection
- javascript - 如何将此 JavaScript 代码放入循环中?
- postgresql - DBT 快照在“dbt 快照”上产生错误
- html - 文本区域对齐