编写递归函数int fib(int n)求Fabonacci数列.
Fabonacci数列的定义为:
f(n)=f(n-2)+f(n-1) (n>=2) 其中 f(1)=1,f(2)=1。
#include<stdio.h>
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret=fib(n);
printf("%d", ret);
return 0;
}
输入两个”有序”的数字数组,用函数将其拼接成一个有序的数组,并输出(例如:0,1,3,3,4和2,3,4,6,8拼接成0,1,2,3,3,3,4,4,6,8)
#include<stdio.h>
#include<stdlib.h>
int* Merge(int* array1, int size1, int* array2, int size2)
{
int index1 = 0;
int index2 = 0;
int index = 0;
int* pTemp = malloc(sizeof(size1 + size2));//创建一个大小为已知两个数组大小和的数组,用pTemp标记
while (index1 < size1 && index2 < size2)//循环到其中一个数组为空,就退出循环
{
if (array1[index1] < array2[index2])//如果数组1的元素小于数组2的元素,就把数组1的元素放到新数组
pTemp[index++] = array1[index1++];
else
pTemp[index++] = array2[index2++];//否则就把数组2的元素放到新数组
}
if (array1[index1])//退出循环后,如果数组1的元素未空,就把数组1的元素都放到新数组中,因为数组1是有序的,所以不用排序
pTemp[index++] = array1[index1++];
if (array2[index2])//退出循环后,如果数组2的元素未空,就把数组2的元素都放到新数组中,因为数组2是有序的,所以不用排序
pTemp[index++] = array2[index2++];
return pTemp;
}
int main()
{
int* p;
int size1 = 0;
int size2 = 0;
//int num = 0;
int array1[] = { 1, 4, 6, 7, 9, 12 };
int array2[] = { 2, 3, 4, 5, 6, 7, 8, 10 };
size1 = sizeof(array1) / sizeof(array1[0]);//数组1的元素个数
size2 = sizeof(array2) / sizeof(array2[0]); //数组2的元素个数
int num = size1 + size2;
int array[20] = { 0 };//新数组,此数组的大小必须大于或者等于数组1和数组2的大小之和
p = Merge(array1, size1, array2, size2);
for (int i = 0; i < num; ++i)//打印新数组
{
array[i] = *p++;
printf("%d ", array[i]);
}
printf("\n");
system("pause");
return 0;
}
编写一个”递归函数”,将输入的正整数逐位相加,直到最后相加的结果为个位数。
例:
38 à3 + 8 à11, 11 à1 + 1 à2。
#include<math.h>
# include<stdio.h>
int DigitSum(int n)
{
if (n > 9)
return DigitSum(n / 10) + n % 10;
else
return n;
}
int main()
{
int n = 0;
scanf("%d", &n);
int sum = DigitSum(n);
printf("%d\n", sum);
return 0;
}