#include <stdio.h>#include <stdlib.h>
void num1 (int*p, int n)//非递归求第n个数的斐波那契数的函数
{
int i = 0;
p[0] = 1;
p[1] = 1;
for (i=2; i<n; i++)
{
p[i] = p[i-2]+ p[i-1];
}
}
int num2 (int n)//递归求第n个数的斐波那契数的函数
{
if (n==1 || n == 2)
{
return1;
}
else
{
return num2(n-1)+num2(n-2);
}
}
int main()
{
int arr[10];
int i = 0, n = 0;
scanf ("%d", &n);
num1 (arr, n);
printf ("第%d个斐波那契数是:%d(非递归)\n", n, arr[n-1]);
num2 (n);
printf ("第%d个斐波那契数是:%d( 递归)\n", n, num2(n));
system ("pause");
return0;
}
/*
运行结果:
6
第6个斐波那契数是:8(非递归)
第6个斐波那契数是:8( 递归)
请按任意键继续. . .
*/
2、编写一个函数实现n^k,使用递归实现
#include <stdio.h>#include <stdlib.h>int jiechen(int n, int k)
{
if (k == 0)
{
return1;
}
else
{
return (n * jiechen(n, k-1));
}
}
int main()
{
int i = 0;
int k = 0;
printf ("i的k次方:\n");
printf ("i = ");
scanf ("%d", &i);
printf ("k = ");
scanf ("%d", &k);
if (i<0)
{
printf ("输入有误!!\n");
}
else
{
printf ("%d的%d次方是:%d\n", i, k, jiechen (i, k));
}
system ("pause");
return0;
}
/*
运行结果:
i的k次方:
i = 3
k = 33的3次方是:27
请按任意键继续. . .
*/
3、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include <stdio.h>#include <stdlib.h>int DigitSum(int n)
{
int sum = 0;
while (n)
{
sum += n%10 ;
n = n / 10;
}
return sum;
}
int main()
{
int a = 0;
scanf ("%d", &a);
printf ("%d\n", DigitSum(a));
system ("pause");
return0;
}
/*
运行结果:
172919
请按任意键继续. . .
*/