python程序设计实例:函数递归调用解决阶乘差问题

是一种直接或者间接调用函数自身的算法,其实质是把问题分解成规模缩小的同类子问题,然后递归调用表示问题的解。可以说,在一个函数体内部去调用该函数的本身,该函数就是递归函数,即该函数题内部嵌套了其本身的部分。

一个完整的递归操作由两个部分组成,一部分是递归调用,另一个部分是递归终止条件,一般可以使用if-else结构来判断递归函数的调用和递归的终止。

能够设计成递归算法的问题必须满足两个条件:

一是:能找到反复执行的过程;

二是能找到跳出担负执行的过程的条件。(递归出口)

由于递归的前提是函数的调用,先定义函数,

def fact(n):  ##n的阶乘为n!=n*(n-1)!
    if n==1:
        return 1
    else:
        return n*fact(n-1)##自己调用自己了

print(fact(5))

上述代码运行结果为120。

例:辗转相除法求解两个数之间的最大公约数。循环编程的思路为两个正整数a和b,余数为temp,若temp为0,则b为最大公约数,若temp不为0,则把b赋值给a,temp的值赋值给b,重新计算a/b,直到余数为0.

采用循环结构的程序编写:

#定义几个参数的初值带处理:
a=162
b=189
temp=2
if b>a:
    b,a=a,b
while temp!=0:
    temp=a%b
    if temp==0:
        print('最大公约数为%d',b)
    else:
        a=b
        b=temp

 采用函数递归:

def gcd(a,b):
   if b==0:
       return a
   else:
       return gcd(b,a%b)
a=162
b=189
print('%d与%d的最大公约数为%d'%(a,b,gcd(a,b)))

例:设n为大于等于2的正整数,用函数递归的方法求级数n!-(n-1)!的结果,其中n为4——10之间任意输入整数。

def fact(n):
    if n == 1:
         return 1
    else:
        return n * fact(n-1)


n = int(input("请输入n的值:"))
if n>=4 and n<=10 :
     s=fact(n) - fact(n-1)
     print('结果为:%d'%(s))
else:
    print("输入无效")

上面代码的思路是,首先定义阶乘的函数,再在其后书写一个计算结果的程序,程序中出现了二次递归得到现象,比较低级。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值