这是一个求组合数的代码
能正常运行
能正常运行
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
int a[MAXN]= {0};
int counts=0;
void combine(int m,int k)
{
int i,j;
for (i=m; i>=k; i--)
{
a[k]=i;
if (k>1)
{
combine(i-1,k-1);
}
else
{
counts++;
for (j=a[0]; j>0; j--)
{
printf("%2d ",a[j]);
}
printf("\n");
}
}
}
int main()
{
int m,n;
printf("Please input m:");
scanf("%d",&m);
printf("Please input n:");
scanf("%d",&n);
counts=0;
a[0]=n;
combine(m,n);
printf("All kinds is:%d\n",counts);
return 0;
}
假设输入5 3 ,
在程序运行的时候,,经过3个递归,K的值已经变为1,但之后本人看K的值会跳变为2,问一下这是为什么
解决方案
50
假设输入5 3 ,
在程序运行的时候,,经过3个递归,K的值已经变为1,但之后本人看K的值会跳变为2,问一下这是为什么
=》
不知道你是怎么看的,递归吗,执行完了最内侧的,就要执行倒数第二的了,是不是在执行倒数第2时看到的K为2啊,假如是的话就应该这样啊。
在程序运行的时候,,经过3个递归,K的值已经变为1,但之后本人看K的值会跳变为2,问一下这是为什么
=》
不知道你是怎么看的,递归吗,执行完了最内侧的,就要执行倒数第二的了,是不是在执行倒数第2时看到的K为2啊,假如是的话就应该这样啊。
100
感觉题主没有很好的理解递归。
递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。
但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码。
函数本人在一层层的往深度调用本人,然后一层层的往回返。
递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。
但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码。
函数本人在一层层的往深度调用本人,然后一层层的往回返。