Homework 3
Q1: Num Eights
用递归函数求一个数中有几位8
1 | def num_eights(n): |
递归出口:每一位都减完后n==0时
每次返回时递归调用自身,传入未判断的部分
若发现该位是8,则返回值加一,否则不变
Q2: Digit Distance
用递归函数求每两位的差的绝对值之和
1 | def digit_distance(n): |
递归出口:当查到最后一位时绝对值为0,返回0
否则将最后一位与倒数第二位取出,将取完最后一位的剩余部分传入递归函数继续判断,返回值加上两位数绝对值之差
Q3: Interleaved Sum
写一个函数,要求对1-n中的所有奇数传入odd_func,所有偶数传入even_func,返回所有数计算后和
1 | def interleaved_sum(n, odd_func, even_func): |
由于题目不让使用循环与取模运算判断奇偶,我们只能使用递归函数
由于奇数与偶数是分开的,我们可以发现,奇数+2=奇数,奇数+1=偶数
因此我们可以写一个内嵌函数,让一个计数变量k从1开始,将k传入odd_func,k+1传入even_func
然后递归调用该函数从k+2开始
递归出口即k>n或k=n(此时k一定为奇数,直接传入odd_func并返回)
Q4: Count Coins
给予n刀乐,把他分为面值分别为1刀乐,5刀乐,10刀乐,25刀乐的四种货币,输出分法数
1 | def count_coins(total): |
Q5: Towers of Hanoi
实现汉诺塔游戏并描述每次移动过程
1 | def move_stack(n, start, end): |
详见五点七边讲解视频