首页 > 解决方案 > 我的函数应该使用什么返回类型来打印斐波那契数字?

问题描述

我正在尝试编写一个函数来打印 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;
}

标签: c++functionfibonaccireturn-type

解决方案


您看到的最后一个 0 在那里,因为您从 中返回 false genFib(),然后打印它。因为您正在打印方法中的所有内容genFib(),所以您不需要打印方法的结果,或者从它返回任何内容。如果您尝试以下操作,您将不会打印 的结果genFib(),即您的尾随 0。

int main(){
    int x = 372; // Simply a random number
    genFib(5, 20);
    return 0;
}

由于您也不关心 的返回值genFib(),因此您应该返回void而不是false. 如果您打印该方法的结果,这将阻止打印任何内容。


推荐阅读