在这个递归示例上有些困惑
A little confused on this recursion example
本文关键字:递归 更新时间:2023-10-16
int gcd (int a, int b)
{
if (b == 0)
return a;
if (a == 0)
return b;
return gcd (b, a % b);
}
GCD(5,15(的结果是什么?
我最终得到15,但我不确定是否正确,所有的循环都使我感到困惑。
以下是按顺序
进行的递归调用gcd(5, 15)
gcd(5, 5) # Because 5 % 15 = 5
gcd(5, 0)
因此,GCD的返回值(5,15(为5
让A = 5和B = 15;
在第一个循环中,我们检查A和B中的任何一个是否为0,它们不是这样称呼
GCD(15,0(;因为5%15 = 5。
so a = 15,b = 5。
我们致电GCD(5,15%5(,即GCD(5,0(。
答案是5;
以这种方式参见递归调用:
gcd(5, 15)
|
gcd(15, 5 (as 5 % 15) ) // 'b' simply takes position of 'a'
|
gcd(5, 0 (as 15 % 5) )
|
if (b == 0) return a; // a is 5, so returned value is 5.
return 5;
return 5;
return 5;
gcd (5, 15)
返回 gcd (15, 5 % 15) == gcd (15, 5)
,然后返回 gcd (5, 5 % 15) == gcd (5, 5)
,返回 gcd (5, 5 % 5) == gcd (5, 0) == 5
。所以你应该返回5。
查看发生的事情的一种好方法是在功能开始时和两个最终返回点插入printf
语句,以显示发生的情况:
gcd(5,15)
gcd(15,5)
gcd(5,0)
5
一个示例Python实现:
def gcd (a, b):
print("gcd({0},{1})".format(a, b))
if b == 0:
print(a)
return a
if a == 0:
print(b)
return b
return gcd (b, a % b)
gcd(5,15)
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- 递归函数有效,但无法记忆
- 包含模板文件的递归会导致编译失败