C语言中的递归问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 22:54:15
3.有一个糊涂人,他写了n封信和n个信封,到了邮寄的时候,把所有的信都装错了信封。设Dn为n封信封可能的种类数,可以用下面的递归
公式:Dn=(n-1)(Dn-1+Dn-2)
D2=1
D1=0
请分别用递归和递推方法编程计算Dn,n由键盘输入。
谢谢大家啦

#include<stdio.h>
main()
{
int CalDn(int m);
int n;
printf("please input n :");
scanf("%d",&n);
printf("Dn is :%d\n",CalDn(n));
}

int CalDn(int m)
{
if(m==1) return 0;
else if(m==2) return 1;
else return (m-1)*(CalDn(m-1)+CalDn(m-2));
}

// 下面的代码可以完成你的要求,仅供参考。

#include <stdio.h>
#include <stdlib.h>

int GetD1(int n, int *D);
int GetD2(int n);

int main(int argc, char *argv[])
{
int n;
int D;
if (argc != 2)
{
printf("Usage: %s number\n", argv[0]);
exit(0);
}
n = atoi(argv[1]);

printf("递归: %d\n", GetD1(n, &D));

printf("递推: %d\n", GetD2(n));

return 0;
}

int GetD1(int n, int *D)
{
if (n <= 1)
{
*D = 0;
return 0;
}
else if (