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

发布时间:2022-11-20

本文目录一览:

  1. Python程序,定义一个 prime() 函数求整数 n 以内(不包括n)的所有素数(1不是素数)
  2. 用递归求素数分解 求高手修改 !!
  3. python将一个正整数分解质因数.
  4. Python 实现递归
  5. 使用python将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。应该要怎么做?

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

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

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

#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字段,我们要拿到所有childrenname字段的值,这时候就要用到递归啦~

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下的语句(不会再递归)。 至此,每一层级中childrenname以及下一层级childrenname就都取出来了 希望到这里能帮助大家理解递归的思路,以后根据这个模板直接套用就行 (晚安啦~) 源码参考:

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

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

  1. 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
  2. 如果k < n,但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 * 5
100 = 2 * 2 * 5 * 5