首页 > 编程知识 正文

python递归程序以素数分解,python中递归程序

时间:2023-12-27 22:27:40 阅读:326506 作者:IJTH

本文目录一览:

Python程序,定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数)

定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数),br并返回一个按照升序排列的素数列表。使用递归来实现一个二分查找算法br函数bi_search(),该函数实现检索任意一个整数在 prime() 函数生成的素数列br表中位置(索引)的功能,并返回该位置的索引值,若该数不存在则返回 -1。brbr输入格式:br第一行为正整数 nbr接下来若干行为待查找的数字,每行输入一个数字br输出格式:br每行输出相应的待查找数字的索引值br输入样例:br10br2br4br6br7br输出样例:br0br-1br-1br3br

用递归求素数分解 求高手修改 !!

#include stdio.h

#include math.h

/*声明函数int isPrime(int n)判断一个数是否为素数*/

int isPrime(int n);

/*声明函数max(int num)求一个数的最大为素数的公约数*/

int max(int num);

/*声明函数void recurPrintFactor(int n)打印素数分解的结果*/

void recurPrintFactor(int n);

main()

{

/*a起始数,b结尾数,n被操作数*/

int a,b,n;

printf("Please input two integers:");

scanf("%d %d",a,b); //最好以空格做分隔符

printf("The result is:n");

/*从a到b逐一对数进行操作*/

for(n=a;n=b;n++)

{

printf("%d=",n);

recurPrintFactor(n);

putchar('n'); //换行

}

printf("n");

system("pause");

return 0;

}

int isPrime(int n)

{

int i=2,limit;

int isPrim=1;

limit=(int)(sqrt(n)+0.5);

while (i=limit isPrim==1){

if ((n%i)==0)

isPrim=0;

else

i++;

}

return isPrim;

}

int max(int n)

{

int i;

i=n-1;

while((n%i!=0)||(isPrime(i)==0))

{

i=i-1;

}

return i;

}

void recurPrintFactor(int n)

{

int num = max(n); //max只调用一次就行了,不要重复调用

if(num==1) //终止条件一定要放前面

{

printf("%d",n);

}

else

{

printf("%d*",num);

/*输入的值=前一个因子最大素公约数*/

recurPrintFactor(n/num);

}

return;

}

python将一个正整数分解质因数.

n not in [1] 就是n不等于1

print '{}*'.format(index)是在最后将输入的n打印成质因数,就是变成1*2*5这种样式

Python 实现递归

一、使用递归的背景

先来看一个☝️接口结构:

这个孩子,他是一个列表,下面有6个元素

展开children下第一个元素[0]看看:

发现[0]除了包含一些字段信息,还包含了 children 这个字段(喜当爹),同时这个children下包含了2个元素:

展开他的第一个元素,不出所料,也含有children字段(人均有娃)

可以理解为children是个对象,他包含了一些属性,特别的是其中有一个属性与父级children是一模一样的,他包含父级children所有的属性。

比如每个children都包含了一个name字段,我们要拿到所有children里name字段的值,这时候就要用到递归啦~

二、find_children.py

拆分理解:

1.首先import requests库,用它请求并获取接口返回的数据

2.若children以上还有很多层级,可以缩小数据范围,定位到children的上一层级

3.来看看定义的函数

我们的函数调用:find_children(node_f, 'children')

其中,node_f:json字段

    children:递归对象

 以下这段是实现递归的核心:

   if items['children']:

 items['children']不为None,表示该元素下的children字段还有子类数据值,此时满足if条件,可理解为 if 1。

 items['children']为None,表示该元素下children值为None,没有后续可递归值,此时不满足if条件,可理解为 if 0,不会再执行if下的语句(不会再递归)。

至此,每一层级中children的name以及下一层级children的name就都取出来了

希望到这里能帮助大家理解递归的思路,以后根据这个模板直接套用就行

(晚安啦~)

源码参考:

使用python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。应该要怎么做?

对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

程序源代码:

实例(Python 2.0+)

#!/usr/bin/python

# -*- coding: UTF-8 -*-

def reduceNum(n):

print '{} = '.format(n),

if not isinstance(n, int) or n = 0 :

print '请输入一个正确的数字 !'

exit(0)

elif n in [1] :

print '{}'.format(n)

while n not in [1] : # 循环保证递归

for index in xrange(2, n + 1) :

if n % index == 0:

n /= index # n 等于 n/index

if n == 1:

print index

else : # index 一定是素数

print '{} *'.format(index),

break

reduceNum(90)

reduceNum(100)

以上实例输出结果为:

90 = 2 * 3 * 3 * 5100 = 2 * 2 * 5 * 5

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。