zoukankan      html  css  js  c++  java
  • 递归生成10bpDNA

    前面

    运用递归生成10bp所有可能的DNA序列,即由A,T,G,C组成的所有长度为10的字符串。一个位置有4种可能,一共存在有 4^10 = 1048576可能的字符串。

    递归

    递归之前已经写过可以查看汉诺塔游戏的递归解析。看了这篇文章,再来琢磨下能不能自己写出代码。能写出来,代表你理解了~。

    代码

    这里提供PythonC两个语言的代码。经过比较,C的代码比Python的快的很多~

    Python
    import sys
    sys.setrecursionlimit(1048577) # Python默认允许的递归深度为1000,需要重新设置一下。
    
    L = 10
    base = ["A", "T", "G", "C"]
    dna_seq = ["N"] * 10 
    
    def DNA(handle, idx):
    	idx += 1
    	for N in base:
    		if idx < L:
    			dna_seq[idx] = N
    			DNA(handle, idx)
    		else:
    			seq = "".join(dna_seq)
    			handle.write(seq)
    			handle.write("
    ")
    			return 0
    
    def main():
    	with open("DNA_10bp.txt", "w") as f:
    		idx = -1
    		DNA(f, idx) 
    
    main()
    
    C
    #include <stdio.h>
    #include <stdlib.h>
    
    int DNA(FILE *fp, int idx)
    {
        static char base[] = {'A', 'T', 'G', 'C', ''};
        static char dna[12];
        idx++;
        for (int i = 0; i < 4; i++)
        {
            if (idx < 11)
            {
                dna[idx - 1] = base[i];
                DNA(fp, idx);
            }
            else
            {
                dna[idx-1] = '
    ';
                dna[idx + 1] = '';
                fputs(dna, fp);
                return 0;
            }
        }
        return 0;
    }
    
    int main()
    {
        FILE *fp;
        int idx = 0;
        fp = fopen("DNA_10bp.fasta", "w");
        DNA(fp, idx);
        fclose(fp);
        return 0;
    }
    
  • 相关阅读:
    DS博客作业07--查找
    第五次作业——05图
    第四次作业——04树
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客05--指针
    C语言博客作业04--数组
    DS博客作业08--课程总结
    C语言-第0次作业
  • 原文地址:https://www.cnblogs.com/huanping/p/11688345.html
Copyright © 2011-2022 走看看