Python递归

[Python]递归实现求最大公约数算法

编写递归程序实现辗转相除法求最大公约数。

输入

两个由逗号隔开的正整数

输出

它们的最大公因数

样例输入 复制

16,24

样例输出 复制

8

def gcd(a, b):

    if b == 0:

        return a

    else:

        return gcd(b, a % b)

input_str = input()

num1, num2 = map(int, input_str.split(','))

result = gcd(num1, num2)

print(result)

[Python递归]7的个数

输入一个正整数,输出其中7的个数,递归实现。

说明:本题是练习递归的,请自觉使用递归实现

输入

一个正整数

输出

其中7的个数

样例输入 复制

76370

样例输出 复制

2

def count_seven(n):

    if n == 0:

        return 0

    else:

        return (1 if n % 10 == 7 else 0) + count_seven(n // 10)

num = int(input())

result = count_seven(num)

print(result)

[Python递归]缺失的数字

给定一个单调不减的数字(例如12248),求出最高位和最低位之间缺失的数字个数(12248中1和8之间缺失3567,个数为4,2233中2和3之间不缺,个数为0)。

输入

一个单调不减的数字

输出

最高位和最低位之间缺失的数字个数

样例输入 复制

12248

样例输出 复制

4

def missing_numbers(num):

    num_str = str(num)

    low, high = int(num_str[0]), int(num_str[-1])

    count = 0

    for i in range(low + 1, high):

        if str(i) not in num_str:

            count += 1

    return count

num = int(input())

print(missing_numbers(num))

[Python递归]代码抄袭检测

老板发现程序员 Haibara 疯狂生产代码,在几秒钟之内写了 4869 行代码,觉得不可思议,于是去找 Haibara 求教,Haibara 说她 Ctrl C + Ctrl V 了程序员 Bolt 的代码,老板又找到了 Bolt,Bolt 又说他抄了 FZD 的代码 ...... 老板非常生气,于是找到了你,给你一把特制 W968 作为报酬,请你帮他找出这段代码的作者并整治抄代码的行为。

输入

        输入是一个列表 f,程序员从 0 到 len(f) - 1 编号

        f[i] 代表编号为 i 的程序员直接抄袭的程序员的编号,如果他没有抄袭则 f[i] == i

        数据保证不会出现闭环,即类似 1 抄 2,2 抄 3,3 抄 1 的情况。

输出

        输出一个列表 f,f[i] 代表编号为 i 的程序员抄袭的源头程序员的编号,如果他没有抄袭则 f[i] == i。

样例输入 复制

[2, 1, 1]

样例输出 复制

[1, 1, 1]

提示

        建议使用 eval() 函数处理输入

        样例的解释:0 抄 2,2 抄 1,1 没有抄袭,所以 0 和 2 抄袭的源头都是 1,由于 1 没有抄袭,所以 f[1] == 1。

def find_source(f, i):

    if f[i] == i:

        return i

    else:

        return find_source(f, f[i])

def main():

    f = eval(input())

    for i in range(len(f)):

        f[i] = find_source(f, i)

print(f)

if __name__ == "__main__":

    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值