斐波那契在 Python 中可以工作,但在 Java 中却失败

2023-12-31

我有这个代码用于计算fibonacci数在python。它有效并给出了预期的结果。但当我把同样的内容翻译成Java, 它失败。知道这里出了什么问题吗?

In python:

def fib3(n): 
  a,b=0,1
  while n>0:
      a,b=b,a+b
      n-=1
  return a

fib3(12) --> 144

In Java:

 public static int fib2(int n){
        int a = 0;
        int b =1;
        while(n-- >0){
            a=b;
            b=a+b;

        }
    return a;
}

fib2(12) --> 2048


在这个部分:

a=b;
b=a+b;

你正在分配b to a+b, but a已经b。所以你真的加倍了b

最简单的解决方案是一个临时变量:

public static int fib2(int n){
    int a = 0;
    int b =1;
    while(n-- >0){
        int old_a;
        old_a = a;
        a=b;
        b=old_a+b;
    }
    return a;
}

在Python中,a, b = b, a + b存储中间体tuple在将新值分配给变量之前自动执行,而在 Java 中,您需要明确说明这一点

分解Python的指令,a, b = b, a + b正在执行此反汇编:

  5          17 LOAD_FAST                1 (b)
             20 LOAD_FAST                0 (a)
             23 LOAD_FAST                1 (b)
             26 BINARY_ADD
             27 ROT_TWO
             28 STORE_FAST               0 (a)
             31 STORE_FAST               1 (b)

简单来说,继续使用 python,流程如下:

temp_tuple = (b, a + b)
a, b = temp_tuple
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

斐波那契在 Python 中可以工作,但在 Java 中却失败 的相关文章

  • 揭秘sharedctypes性能

    在 python 中 可以在多个进程之间共享 ctypes 对象 然而我注意到分配这些对象似乎非常昂贵 考虑以下代码 from multiprocessing import sharedctypes as sct import ctypes
  • Python、subprocess、call()、check_call 和 returncode 来查找命令是否存在

    我已经弄清楚如何使用 call 让我的 python 脚本运行命令 import subprocess mycommandline lumberjack sleep all night work all day subprocess cal
  • 如何在 Azure 数据工厂 - Databricks 中使用 continuation_token 获取 ADF Pipeline 运行详细信息的下一页?

    我在用 adf client pipeline runs query by factory resourceGroupName 工厂名称 过滤器参数 的方法azure mgmt datafactory DataFactoryManageme
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • `pyqt5'错误`元数据生成失败`

    我正在尝试安装pyqt5使用带有 M1 芯片和 Python 3 9 12 的 mac 操作系统 我怀疑M1芯片可能是原因 我收到一个错误metadata generation failed 最小工作示例 directly in the t
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • 使用布尔值进行冒泡排序以确定数组是否已排序

    我有以下用于冒泡排序的代码 但它根本不排序 如果我删除布尔值那么它工作正常 我知道 由于我的 a 0 小于所有其他元素 因此没有执行交换 任何人都可以帮助我解决这个问题 package com sample public class Bub
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • 导入错误:无法导入名称“时间戳”

    我使用以下代码在 python 3 6 3 中成功安装了 ggplot conda install c conda forge ggplot 但是当我使用下面的代码将其导入笔记本时 出现错误 from ggplot import Impor
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • 如何使用Python保存“完整的网页”而不仅仅是基本的html

    我正在使用以下代码来使用 Python 保存网页 import urllib import sys from bs4 import BeautifulSoup url http www vodafone de privat tarife r
  • 使用Multiprocessing和Pool时如何访问全局变量?

    我试图避免将变量冗余地传递到dataList e g 1 globalDict 2 globalDict 3 globalDict 并在全球范围内使用它们 global globalDict然而 在下面的代码中并不是这样做的解决方案 是否有
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这

随机推荐

  • 为什么 nuget 要安装一堆系统命名空间引用?

    我正在尝试从 nuget 安装一个库 我原本期望可能有 3 或 4 个不同的依赖项 但它安装了一大堆System依赖关系 这是日志 Attempting to gather dependency information for packag
  • Android Studio 2.3.3 首次运行时卡住

    我下载了安卓工作室2 3 3 https developer android com studio index html for Linux并将内容解压到 usr local then cd android studio bin 编辑了文件
  • 当我从 MainLayout 停止代码时,防止代码在我的页面上运行

    我有一个带有 MainLayout 的 Blazor PWA 应用程序和一堆页面 每当用户未登录时 我想将他们重定向到登录屏幕 如果我可以将它们从 MainLayout 重定向到登录屏幕 我已经知道用户尚未登录 那就太好了 我只是检查 co
  • 房间失效跟踪器初始化两次

    我有一个水平回收器视图 其中包含自定义项目 每个项目都可以保留当前项目在回收器视图中的位置 我想在使用拖放移动项目时更新项目位置 但是 当水平视图中的项目超过三个时 数据将被删除 请帮助我 源代码 https github com parm
  • 使用 Parse 和 PubNub 的 Android 聊天应用程序指南

    我正在尝试创建一个简单的 Android 聊天应用程序 用户可以在其中注册并拥有好友列表来开始对话 我打算使用Parse https parse com 对于数据库后端和PubNub http www pubnub com 对于实际的聊天频
  • 如何使用 AWS Amplify 和 Next.js 创建生产环境变量

    我有一个 API 密钥 需要它来访问 API 端点 在我的 Next js 应用程序中 我将此密钥存储在 env local像这样 API KEY qwerty123 我在我的getStaticProps与 process env 一起使用
  • Gcm电话注册错误

    我正在尝试设置一个应用程序来与 gcm 一起使用 但每次我收到phone registration error 错误 根据 Gcm 文档 此错误意味着 Incorrect phone registration with Google Thi
  • 如何将变量传递给使用 gcc 编译的 intel 格式内联 asm 代码

    我想向您寻求一些帮助 我有一个包含大量 C 源代码的项目 大多数是用gcc编译的 但也有一些是用Intel编译器编译的 后面的代码在微软有很多内联asm代码MASM格式 我想用 gcc 编译整个项目并修改尽可能少的代码 所以我编写了一个 p
  • 无法解析新 Android Studio 项目上的符号 GooglePlayServicesClient

    我刚刚安装了 Android Studio 1 1 0 并创建了一个新项目 我使用包括 Google 登录在内的登录活动创建了它 项目一打开 我就看到很多错误PlusBaseActivity java 这些似乎源于这样一个事实 com go
  • iOS7:UITapGestureRecognizer 重用问题

    我设置了三个按钮 每个按钮都标记为 1 3 我的 UITapGestureRecognizer 仅工作一次 并且仅适用于第一个 UIButton 无法选择其他两个选项 代码 void viewDidLoad super viewDidLoa
  • 从另一个列表中获取项目的边界

    我有一个清单 就像 tlist 0 0 0 07 0 13 0 15 0 2 0 22 which is sorted 我还有另一个清单 newlist 0 0 0 04 0 08 0 12 0 16 0 2 numbers with a
  • 如何使用加密密码连接到 PostgreSQL 服务器

    在通常的情况下 连接字符串包含纯文本的密码 但这可以被Wireshark捕获 所以我想在连接字符串中使用加密的密码 我从 Postgres 文档中找到了以下摘录 通过网络加密密码MD5认证方式 在将密码发送到客户端之前 在客户端对密码进行双
  • c - 返回状态/值的适当范围

    最近在看一本关于linux编程的书时 得到这样的信息 exit 的 status 参数定义了进程的终止状态 当该进程的父进程调用 wait 时 该状态可用 尽管定义为 int 但实际上只有状态的底部 8 位可供父级使用 并且只有0 127建
  • DelayedJob 错误:已经有一个或多个程序实例正在运行

    一些背景故事 昨晚 当delayed job工作人员正在处理图像处理作业时 我的服务器磁盘空间不足 当我尝试阻止工作人员时 我得到的答复是 已终止 RAILS ENV production script delayed job stop T
  • 如何突出显示 UIButton 子类?

    我有一个子类UIButton我覆盖的地方drawRect用于自定义外观的按钮 但现在单元格不突出显示 我怎样才能解决这个问题 我已经为按下单元格时的另一个自定义绘制矩形准备好了代码 void drawRect CGRect rect Gen
  • 为什么 scala 不推断继承特征的类型成员?

    我有一组类型 每个类型都有自己的类型成员 sealed trait FieldType type Data def parse in String Option Data object Name extends FieldType type
  • Alpha/透明度和 MTKView?

    我有一个 Metal 片段着色器 它返回一些带有 alpha 通道的透明颜色 我想在 MTKView 下显示一个 UIView 但我得到的唯一背景结果是黑色和 错误噪声 MTL渲染管道描述符 pipelineStateDescriptor
  • Paramiko 相当于管道控制和输入/输出管道

    我需要一种基于 paramiko 的轻量级文件传输方法SSH2 http en wikipedia org wiki SSH2服务器 dropbear http matt ucc asn au dropbear dropbear html
  • 在java中解析CSV

    我遇到了这种奇怪的情况 我必须水平阅读 所以我得到一个 csv 文件 其中包含水平格式的数据 就像下面这样 CompanyName RunDate 10 27 2010 11 12 2010 11 27 2010 12 13 2010 12
  • 斐波那契在 Python 中可以工作,但在 Java 中却失败

    我有这个代码用于计算fibonacci数在python 它有效并给出了预期的结果 但当我把同样的内容翻译成Java 它失败 知道这里出了什么问题吗 In python def fib3 n a b 0 1 while n gt 0 a b