C语言代码 递归函数 DNA序列或称基因序列是使用一串字母表示的真实的或者假设的携带基因信息的DNA分子的一级结构。 DNA序列使用的字母只有 A,C,G和T,分别代表组成DNA的四种核苷酸。 为了获知基因序列的相似性,通常需要对比不同生物的基因序列,例如下图所示: , 其中两组基因序列分别为: ATCGCCGTAAGT 和 ATCGGCATAAGA 为了计算相似度,可以按位置比较相同的基因对占所有基因对的比例。 此时很显然,共有9组完全相同,占总共12组的75%,即相似度为 9/12 = 0.75。 注意:相似度请保留小数点后两位。 【样例输入】 ATCGCCGTAAGT ATCGGCATAAGA 【样例输出】 0.75 【样例输入】 ATCGGCTCCGTAAGT ATCGCTGCATAAAGT 【样例输出】 0.60 【样例输入】 TTATCGGCATAAGG ATCGGCATAAGGAA 【样例输出】 0.14 【样例输入】 ATTCAATTCGCCGTAAGTTTA ATCGGTCAATTCGCCGTAAGT 【样例输出】 0.19 【样例输入】 ATCGCCGTAAGTGTAAGTGT ATCGGCGTGTAAGTGTAAGT 【样例输出】 0.55
时间: 2023-11-13 21:24:01 浏览: 28
以下是C语言的递归函数代码实现:
```c
#include <stdio.h>
#include <string.h>
double similarity(char s1[], char s2[], int len, int index) {
if (index >= len) {
return 0;
}
if (s1[index] == s2[index]) {
return 1 + similarity(s1, s2, len, index + 1);
} else {
return similarity(s1, s2, len, index + 1);
}
}
int main() {
char s1[100], s2[100];
scanf("%s%s", s1, s2);
int len = strlen(s1);
double sim = similarity(s1, s2, len, 0) / len;
printf("%.2lf", sim);
return 0;
}
```
这个递归函数使用了两个字符串,以及字符串长度和当前比较的位置作为参数。函数每次比较两个字符串当前位置的字符是否相同,如果相同则递归比较下一个位置,否则只递归比较下一个位置。当比较到字符串末尾时,返回已经比较过的相同字符的个数,最终将其除以字符串长度得到相似度。
相关问题
编写一个c语言代码,内容是使用冒泡法或快速排序法对给定序列排序(递归/非递归两种方法)
以下是使用冒泡排序法对给定序列排序的非递归方法的C语言代码:
```c
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n-1; i++) {
for (j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr, n);
printf("排序后的序列:\n");
for (int i=0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
以下是使用快速排序法对给定序列排序的递归方法的C语言代码:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high-1; j++) {
if (arr[j] <= pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
printf("排序后的序列:\n");
for (int i=0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
c语言使用递归函数倒序输出字符串
可以使用递归函数倒序输出字符串的C语言代码如下:
```c
#include <stdio.h>
void reverse(char *str) {
if (*str) {
reverse(str + 1);
printf("%c", *str);
}
}
int main() {
char str[] = "Hello, world!";
reverse(str);
return 0;
}
```
这段代码会将字符串 "Hello, world!" 倒序输出,即 "dlrow ,olleH!"。