gpt4 book ai didi

python - 斐波那契数列和返回问题?

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:21 26 4
gpt4 key购买 nike

我正在尝试学习 C++,并且已经开始使用 Python 进行编程。这是一个简单的程序,用于计算两个值 a、b 之间的斐波那契数。但是,当我运行代码时,只打印了数字 1,我不知道为什么。我认为这与在 for 循环中使用 return 有关。任何帮助将不胜感激

#include <iostream>
using namespace std;

int fibo(int b,int a=0){
int x=0;
int y=1;
for(int i=0; i<=b; i++){
int x0=x;
int z=x+y;
x=y;
y=z;
if(x>a){
return x0;
}
}
}

int main()
{
cout << fibo(100)<<endl;
return 0;
}

这里是python函数,仅供引用

def fibo(b,a=0):
x=0
y=1
while x<=b:
z=x+y
x0=x
x=y
y=z
if x>a:
print x0

我也在c++中尝试过以下

#include <iostream>
using namespace std;

int fibo(int b,int a=0){
int x=0;
int y=1;
for(int i=0; i<=b; i++){
int x0=x;
int z=x+y;
x=y;
y=z;
if(x>a){
cout << x0 <<endl;
}
}
}

int main()
{
fibo(100);
return 0;
}

但是这给出了超出 b 值的斐波那契数

最佳答案

这是您的代码从 Python 到 C++ 的确切移植

#include <iostream>

using namespace std;

void fibo(int b,int a=0){
int x=0;
int y=1;
int z, x0;
while( x <= b ) {
z= x + y;
x0 = x;
x = y;
y = z;
if(x > a) {
cout << x0 << endl;
}
}
}

int main()
{
fibo(100);
return 0;
}

在您的 Python 代码中,如果没有显式返回,则函数的默认返回值将为 None .在 C++ 中,这相当于 void function .

为什么你的 for 循环不起作用?

for 循环旨在迭代多次。它的语法是:

for (initialization; condition; increase) statement;

与 while 循环类似,此循环会在条件为真时重复语句。但是,除此之外,for 循环还提供了特定的OPTIONAL 位置来包含初始化和增加表达式,分别在循环第一次开始之前和每次迭代之后执行。

  1. 执行初始化。通常,这会声明一个计数器变量,并将其设置为某个初始值。这是执行一个单次,在循环的开始。
  2. 检查条件。如果为真,循环继续;否则,循环结束,语句被跳过,直接进入第5步。
  3. 语句被执行。像往常一样,它可以是单个语句或用花括号 { } 括起来的 block 。
  4. 执行increase,循环回到第2步。
  5. 循环结束:继续执行它之后的下一个语句。

在这里阅读更多:http://www.cplusplus.com/doc/tutorial/control/#for .

那么让我们分解你的循环:

int x=0;    // initialize x to 0
int y=1; // initialize y to 1
for(
int i=0; // initialize i to 0
i<=b; // keep looping until i is less than or equal to b (a variable passed in)
i++ // after every single loop iteration, increment i by 1
) {
int x0=x; // initialize x0 to x
int z=x+y; // initialize z to (x + y)
x=y; // assign the value of y to x
y=z; // assign the value of z to y
if(x>a){ // if x is greater than a, print the value of x0
cout << x0 <<endl;
}
}

在您的 Python 代码中,您没有 i , 你使用 x作为你的loop invariant .所以那应该是 condition你的for循环:x <= b .初始化部分应该是你在循环之前设置的变量,所以:int x = 0, y = 1, x0, z应该是 initialization .最后一部分是增量。在你的 python 代码中,你的增量是 x = y ,但在 for 循环中,该部分在迭代完成后 执行,因此我们不能只设置 x = yy = z 以来,在 for 循环的增量部分在增量部分之前执行。我们可以做的是使用一点代数:z = y + x , 所以我们可以得到 y 的值通过减去 x来自 z : z - x .

这使得 for 循环:

void fibo2(int b,int a=0){
for(
int x = 0, y = 1, x0, z;
x <= b;
x = (z-x)
) {
x0 = x;
z = x+y;
y = z;
if(x > a){
cout << x0 <<endl;
}
}
}

希望这对您有所帮助。

关于python - 斐波那契数列和返回问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25587635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com