讨教各位一个问题

C语言 码拜 9年前 (2016-04-10) 933次浏览
这是一个求组合数的代码
能正常运行

#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啊,假如是的话就应该这样啊。

100

感觉题主没有很好的理解递归。
递归就是某个函数直接或间接地调用了自身,这种调用方式叫做递归调用。
但凡是递归的函数,一定会在某一个地方存在能够返回上一层函数的代码。
函数本人在一层层的往深度调用本人,然后一层层的往回返。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明讨教各位一个问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)