这是一个求组合数的代码
能正常运行
能正常运行
#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
感觉题主没有很好的理解递归。
递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。
但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码。
函数本人在一层层的往深度调用本人,然后一层层的往回返。
递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。
但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码。
函数本人在一层层的往深度调用本人,然后一层层的往回返。