首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果递归调用应该在a或b变为0时停止并返回,为什么这个最大的公约数程序的输出是-1

递归调用的最大公约数程序输出为-1的原因是因为在递归调用过程中,没有处理a和b同时为0的情况。

最大公约数(Greatest Common Divisor,简称GCD)是指能够同时整除两个或多个整数的最大正整数。递归调用的最大公约数程序通常使用欧几里得算法(Euclidean algorithm)来计算。

下面是一个修正后的递归调用的最大公约数程序:

代码语言:python
代码运行次数:0
复制
def gcd(a, b):
    if a == 0 or b == 0:
        return max(a, b)
    else:
        return gcd(b, a % b)

在修正后的程序中,当a或b变为0时,会返回另一个非零的数作为最大公约数。这是因为任何数与0的最大公约数都是它本身。

对于输入为a=0和b=0的情况,修正后的程序会返回0作为最大公约数。这是因为0与任何数的最大公约数都是0。

推荐的腾讯云相关产品:腾讯云函数(云原生无服务器计算服务),腾讯云数据库(云原生数据库服务),腾讯云服务器(云原生服务器计算服务)。

腾讯云函数:https://cloud.tencent.com/product/scf

腾讯云数据库:https://cloud.tencent.com/product/cdb

腾讯云服务器:https://cloud.tencent.com/product/cvm

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

辗转相除法

否则,将b的值赋给a,将r的值赋给b,然后返回步骤2继续执行。 这个算法会一直递归执行,直到余数为0为止。由于每一步的除数都会变小,所以这个过程最终一定会停止,并且得到的结果就是两个数的最大公约数。...下面是一个简单的C语言程序,用于演示如何使用辗转相除法来求两个整数的最大公约数(GCD): 1:代码 #include // 函数声明 int gcd(int a, int b);...%d", &num1, &num2); // 调用gcd函数计算最大公约数并输出结果 int result = gcd(num1, num2); printf("The GCD...b); } 在上面的代码中,我们定义了一个gcd函数,它接收两个整数a和b作为参数,并返回它们的最大公约数。...否则,我们递归地调用gcd函数,将b和a % b(即a除以b的余数)作为新的参数。 在main函数中,我们读取用户输入的两个整数,调用gcd函数计算它们的最大公约数,并输出结果。

19910

算法基础学习笔记——⑭欧拉函数快速幂扩展欧几里得算法中国剩余定理

eulerTotient函数遍历从1到n的所有数字,检查它们是否与n互质(即它们的最大公约数为1),并统计互质的数字的个数。最后,程序输出计算得到的欧拉函数值。...重复这个过程,直到指数变为0,然后返回计算得到的结果。可以运行上述代码,输入一个基数和指数,程序将计算并输出幂运算的结果。...否则,我们递归调用函数,将b mod a和a作为新的输入,并获取递归返回的最大公约数、系数x1和系数y1。...最后,我们在main函数中接受用户输入的两个整数a和b,并调用extendedEuclidean函数来计算最大公约数和系数。然后,我们输出最大公约数和系数的结果。...你可以运行上述代码,输入两个整数,程序将计算并输出最大公约数和满足贝祖等式的系数。

19910
  • 【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】

    首先检查b是否为 0,如果是,那么a就是最大公约数,直接返回a。否则,递归调用gcd函数,将b和a % b作为新的参数传递进去。这个递归过程会不断进行,直到b变为 0,此时就找到了最大公约数。 3....二、公约数的判定在 C 语言中的应用 1. 基本原理 判定两个数是否有公约数,通常可以通过计算它们的最大公约数来实现。如果最大公约数大于 1,那么这两个数就有除 1 以外的公约数。...> 1; } 这个函数has_common_divisor调用gcd函数来计算a和b的最大公约数,然后检查最大公约数是否大于 1。...如果是,就返回 1,表示a和b有除 1 以外的公约数;否则返回 0。 3....测试说明 平台会对你编写的代码进行测试: 测试输入: 64,24 预期输出: 求出的最大公约数是8 开始你的任务吧,祝你成功! 通关代码 /*9. 求两个正整数的最大公约数。

    6710

    小小GCD、LCM拿下拿下

    最大公约数(GCD) 也称为最大公因数或最大公因子,是指两个或多个整数共有的约数中最大的一个。在数学中,这是指能够同时被这些整数整除的最大的正整数。...不过,第一种写法在n为0时直接返回结果,避免了一次递归调用,可能会有微小的性能优势。但在实际应用中,这种差异通常可以忽略不计,大家觉得哪个好记就记哪个就行。...这个过程会不断重复,直到其中一个变为0,最后返回的是a+b,下面我们模拟一下过程。 最大公约数(GCD)模板: int gcd(int m,int n){//辗转相除法 return n==0?...输入格式 第一行包含两个整数 a,b。 第二行包含一个整数 q。 接下来 q 行,每行包含两个整数 l,r。 输出格式 每个询问输出一行答案,即满足条件的最大的 x,如果询问无解,则输出 −1。...输入样例: 9 27 3 1 5 10 11 9 11 输出样例: 3 -1 9 解题思路: 本题考察为最大公约数+二分查找,首先有了a,b,我们先求出这两个数的最大公约数,即所有的公约数都要小于这个数

    8010

    小甲鱼《零基础学习Python》课后笔记(二十二):函数——递归是神马

    递归需要满足:调用自身;有停止条件。 2.思考一下,按照递归的特性,在编程中有没有不得不使用递归的情况?...例如汉诺塔,目录索引(因为你不知道目录里是否还有目录),树结构的定义等. 3.用递归去计算阶乘问题或斐波那契数列是很糟糕的算法,你知道为什么吗?...5.拿手机拍一张“递归自拍照片” 拍这个的话需要两面镜子,那会是一个没有停止条件的递归,无限循环反射下去。...动动手 0.使用递归编写一个power()函数内建函数pow(),即power(x,y)为计算并返回x的y次幂的值。...使用递归编写一个函数,利用欧几里得算法求最大公约数,例如gcd(x,y)返回值为参数x和参数y的最大公约数。

    61320

    【C语言】4种方法求最大公约数和最小公倍数及比较它们的运行时间

    如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。...实质上是以下式子: 根据这一定理可以采用函数嵌套调用和递归调用进行求两个数的最大公约数和最小公倍数,现分别叙述如下: ①函数嵌套调用 求最大公约数: 其算法过程为:设两数为...a; //返回最大公约数到调用函数处 } //辗转相除法函数嵌套求两数的最小公倍数 int multiple (int a,int b) { int divisor (int a,int...b); int temp; temp=divisor(a,b); //再次调用自定义函数,求出最大公约数 return (a*b/temp); //返回最小公倍数到主调函数处进行输出...解题步骤: 1、求最大公约数 对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和b所整除,则temp即为最大公约数。

    1.7K20

    求最大公约数算法_求最大公约数最快方法

    根据上面的原理,辗转相除法的算法流程可以如下: 步骤1:计算a与b的余数r。 步骤2:如果r为0,则返回gcd = b。否则,转到步骤3。...如果调用时a值大于b值,比如a为51,b为21,那么情况跟上述算法原理是相符的。...如果调用时a值小于b值,比如a为21,b为51,那么,21除以51的余数r为21,不为0,于是接着调用GetGCD(51, 21),看到了没?这就和a > b的情况是一样的了。...也就是说我们根本无需判断a和b的大小,当a值小于b值时,算法的下一次递归调用就能够将a和b的值交换过来。...比如当a为100000,b为1时,算法要递归99999次。 四 终极版本 一般情况下,以上两个版本完全够用。如果追求最佳算法性能的终极版本,那就去看《编程之美》第2.7节吧。 五 参考资料 1.

    65011

    详解Winograd变换矩阵生成原理

    为什么提这个是因为,之前我在理解Winograd这个算法的是陷入了一个误区,一直是从深度学习卷积(Correlation)应用的这个角度去理解这个算法,然后一直想不明白,后来换成是从Convolution...简单复习下整除的定义: 整除 可以记作 ,即存在一个整数 使得 。 然后如果 ,则称 和 互素,表示它们的最大公约数为1。而两个整数是否互素和它们本身是否是素数无关。...然后对等式做下变换: 然后考虑 a 和 b 的最大公约数 GCD(a,b) 可知: 接着同样根据取模运算规则和上面的两个公式可得: 所以同理可得 也可以整除 ,也就是 所以通过上面的推导可得: 然后就可以根据这个求解最大公约数的递归式来写实现代码了...2.3、扩展欧几里得算法 在介绍扩展欧几里得算法之前先来看下“裴蜀等式”,下面引用wikipedia上的解释[19]: 在数论中,裴蜀等式或裴蜀定理是一个关于最大公约数(或最大公因式)的定理。...余式是-1 第二步, ,商是,余式是0,停止递归,设置 第三步, 第四步, 得解 ,两边同乘-1得,求得逆元是-1 所以 求解过程: 相当于求解方程 的解 第一步,,商是,余式是2 第二步,,商是,

    1.2K30

    递归函数及例题_递归树求解递归式例题

    定义: 一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等。凡是递归的函数,都是可计算的,即能行的 。...如果最后一位数是0,则不输出,直接再次调用int_inverts(n/10,flag)函数。如果不是,修改flag的值,先输出,然后在调用int_inverts(n/10,flag)。...有谁来对上联或下联? 例题2:求最大公约数 题目描述 设计递归函数;计算正整数a和b的最大公约数并返回 输入与输出要求: 输入两个正整数a和b,输出两数的最大公约数数,占一行。...解题思路: 递归出口: n=1或n=0 , 直接返回值n; 地推关系: b_shift_d(n) = n%10 + 2*b_shift_d(n/10); 示例1: image.png 示例...解题思路: 全排列问题解题思路及代码 问题7: 整数划分问题: 问题描述: 整数划分问题是算法中的一个经典命题之一,有关这个问题的讲述在讲解到递归时基本都将涉及。

    67740

    数据结构和算法-数学问题-最大公约数

    比如,12、16的公约数有1、2、4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16)=4。12、15、18的最大公约数是3,记为(12,15,18)=3。...辗转相除法的执行过程如下: (1)对于已知两自然数a、b,假设a>b; (2)计算a除以b,将得到的余数记为r; (3)如果r=0,则b为求得的最大公约数,否则执行下面一步; (4)将b的值保存到a中,...欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际效率上都是很好的。但是却有一个致命的缺陷,这个缺陷在素数比较小的时候一般是感觉不到的,只有在大素数时才会显现出来。...Stein算法的执行过程如下: (1)对于已知两自然数a、b,a和b谁大谁小没有要求; (2)首先判断a或b的值,如果a=0,b就是最大公约数;如果b=0,a就是最大公约数,从而可以直接完成计算操作。...(4)判断m和n是否为偶数,若都是偶数,记录下公约数为2,同时使m=m/2,n=n/2,。 (5)若m是偶数,n是奇数,使m=m/2,递归调用。 (6)若n是偶数,m是奇数,使n=n/2,递归调用。

    1.2K10

    11.09作业详解(弹球距离,素数,最大公约数最小公倍数,求整数位数及其各位数字之和,打印乘法表)

    ,且想办法然函数中的某个形参无限逼近与该条件,由题目可知,这个限制条件是让h*p^n逼近与0.001即可,当h*p^n满足小于0.001时返回h*p^(n-1),然后再往前推直到求到第一个dist函数,...由于h*p^2>0.001,返回h+h*p^2+h*p^2...直到返回到第一次调用的dist函数即可。...a)*a); return 0; } 先求最大公约数,方法有很多,例如辗转相除,更相减损 我这里用的是更相减损法,原理就是当a与b两个数不相等是将两数相减并赋值给较大的数,当减到两数相同时,这时两数的值即为它们的最大公约数...,而最小公倍数就简单多了,用a,b两数除以最大公约数后相乘再乘上个最大公约数就能得到最小公倍数啦。...123%10=3,第二次12%10=2,第三次1%10=1...这道题只用求和,所以不需要考虑求出各个位上的数字的顺序,如果题目要求正向输出各个位上的数字,就在while中把各个位上的数字赋给一个数组,

    11710

    C++17 中的 std::gcd:探索最大公约数的现代 C++ 实现

    在数学和编程中,最大公约数(GCD,Greatest Common Divisor)是一个非常重要的概念。它表示两个或多个整数共有约数中最大的一个。...返回值是 std::common_type_t,即两个输入类型 M 和 N 的公共类型。例如,如果输入是 int 和 long,返回值类型将是 long。...其基本思想是:对于两个正整数 a 和 b(假设 a > b),a 和 b 的最大公约数等于 b 和 a % b 的最大公约数。重复上述步骤,直到其中一个数变为 0,此时另一个数即为最大公约数。...开发者无需自己实现欧几里得算法,只需调用一个标准库函数即可。(二)类型安全std::gcd 使用模板参数和 std::common_type_t,能够自动处理不同类型的输入,并返回正确的类型。...这意味着在运行时可以直接使用计算好的结果,从而提高程序的运行效率。四、实际应用场景(一)分数化简在处理分数时,常常需要将分数化简为最简形式。最大公约数是化简分数的关键。

    13410

    【C语言刷题——Leetcode12道题】带你起飞,飞进垃圾堆

    请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10] 输出:6 来源:力扣(LeetCode) 字面意思,直接做题即可: 1351....找出数组的最大公约数 给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数 。 两个数的 最大公约数 是能够被两个数整除的最大正整数。...示例 1: 输入:nums = [2,5,6,9,10] 输出:2 解释: nums 中最小的数是 2 nums 中最大的数是 10 2 和 10 的最大公约数是 2 示例 2: 输入:...nums = [7,5,6,8,3] 输出:1 解释: nums 中最小的数是 3 nums 中最大的数是 8 3 和 8 的最大公约数是 1 示例 3: 输入:nums = [3,3]...统计各位数字之和为偶数的整数个数 给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。

    91320

    JavaScript数据结构与算法-Array

    如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办? 思路:这个题和上面那个题,最大的区别是,数组中有重复的数字,也得返回,。...例如:[2,2]和[1,2,1],如果不删,返回结果是[2,2],正确结果是[2]。...示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321。 思路: 我一开始想的是,转成数字直接+1,结果发现如果数字超出最大数字就会出错。...例如:12、16的公约数有1、2、4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16)=4。12、15、18的最大公约数是3,记为(12,15,18)=3。...// 此方法主要用到这样一个定理:a和b的公约数==b和a%b的公约数==a%b和b%(a%b)的公约数…………; 另外要知道.a和0的公约数==a; function Mgn(num1,num2){

    59420

    【蓝桥杯系列】第一节 C的基本用法

    通过 return 语句可以 提前结束 函数并返回调用处。 若省略返回值则 执行到大括号 并返回调用处。 参数列表中为函数需要的各个参数,在调用时需要 提供对应的参数。...} else{ return x; // 必要的出口 }}int main(){ printf("%d",f(1)); return 0;} 递归是在函数内调用函数本身的一种方式...题目9:最大公约数和最小公倍数 写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。...(a % b)){ return b; } gcd(b, a % b);} // 最大公约数 * 最小公倍数 = 两数乘积int lcm(){ return num1 *...– 样例输入:O S, GOMR YPFSU/ – 样例输出:I AM FINE TODAY. 生成元 – 如果 x 加上 x 的各个数字之和得到 y,就说 x 是 y 的生成元。

    1.1K70

    【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】

    在 main 函数中,定义了两个示例数字 24 和 36,调用 gcd 函数求出它们的最大公约数,并将结果输出显示。...a 和 b 是否都是偶数,如果是就不断约去 2,并记录约去 2 的个数(通过 factor 变量)。...然后再通过另一个 while 循环按照更相减损术的思路,用大数减小数,直到两数相等。 最后返回的是约去 2 的个数乘以相等时的这个数,得到最大公约数。 三、求最小公倍数 1....在 main 函数中,定义了示例数字 12 和 18,调用 lcm 函数求出它们的最小公倍数,并输出显示结果。 编程要求 根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。...测试说明 平台会对你编写的代码进行测试: 测试输入: 32 72 预期输出: 最大公约数是:8 最小公倍数是:288 测试输入: 56 98 预期输出: 最大公约数是:14 最小公倍数是:392

    12410

    三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数「建议收藏」

    基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。 提高要求:1.三种以上算法解决两个正整数最大公约数问题。...那么,最后一个除数就是所求的最大公约数; 5. 输出最大公约数和最小公倍数。 2.辗转相除法(三个数) 如果求三个数的最大公约数,可以先求两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数。...最后所得的一个最大公约数,就是所求的几个数的最大公约数。 3.穷举法(两个数) 用穷举法求解两个数的最大公约数步骤如下: 1. 输入两个正整数; 2. i = a(或b); 3....4.相减法(两个数) 1.输入两个正整数a和b; 2.如果a > b,则a = a – b; 3.如果a b,则 b = b – a; 4.如果a = b,则a(或b)即为两数的最大公约数 5.如果...基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出。 提高要求:1.三种以上算法解决两个正整数最大公约数问题。

    2.7K20

    Java常见的坑(二)

    实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数...改观 那么既然知道了原因,该如何去解决这个问题才是我们应该考虑的问题,恰好String 类为我们提供了String.valueOf(char[] c)把char数组变为字符串 1 // 修改程序...调用这些方法导致的结果是,终结器会在那些其他线程正在并发操作的对象上运行,从而导致不确定的行为或死锁。 总之,System....通过调用 System.Halt 可以在不执行关闭挂钩的情况下停止 VM,但是很少使用这个方法。...与大多数StackOverflowError异常一样,本程序也包含了一个无限递归,当你调用一个构造器时,实例变量的初始化操作将先于构造器的程序体运行,上述例子中,internalInstance变量的初始化操作递归调用了构造器

    55710

    c++期末总结

    = 除等于 a=4; a/=2; a=2; %= 模等于 a=3; a%2; a=1; 2.3、比较运算符 作用:用于表达式的比较,并返回一个真值或假值 请详细看表格即可 运算符 术语 示例 结果 =...2.4、逻辑运算符 作用:用于根据表达式的值返回真值或假值 请详细看表格即可 运算符 术语 示例 结果 ! 非 !a 如果a为假,则!a为真; 如果a为真,则!a为假。...break; } if (b == c+1) { return 1; } else return 0; } 3.2求最大公约数最小公倍数 最大公约数和最小公倍数:两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积...)=29 用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。...因为这个加密就是直接加个数, 但是要注意的是char类型是有范围的 3.6逆序输出 #include using namespace std; int main() { int

    14400
    领券