清泛IT社区

标题: 如递归所有控件路径,函数将导致运行时堆栈溢出 [打印本页]

作者: 泡面    时间: 2016-01-15 15:55
标题: 如递归所有控件路径,函数将导致运行时堆栈溢出
程序如下
#include<iostream>
#include<stdio.h>
#include<limits.h>
int max(int a,int b)
{
        if(a>b)
                return a=max(a,b);
                else return b=max(a,b);
}
int max(int a,int b);
int main()
{
        int x,y,z;
        int max(int a,int b);
        printf("input tow numbers:\n");
        scanf_s("%d,%d",&x,&y);
        z=max(x,y);
        printf("maxmum=%d",z);
}
不能正常运行只能输入一个数提示
1>c:\users\administrator\desktop\user\video\video\video.cpp(9): warning C4717: “max”: 如递归所有控件路径,函数将导致运行时堆栈溢出
求解答{:wg:}
作者: 清泛网    时间: 2016-01-15 16:07
首先这段程序的几个问题:
1、int max(int a,int b); 两次函数申明都是多余的:函数定义在调用地方的前面,就不用申明;反之,必须先申明,然后在调用地方的后面实现函数体。
2、max 是自定义的递归函数,但是这是个无限递归函数,没有跳出函数(break)的条件,因此会无限调用直至栈空间溢出。
3、max 在math.h中已经有现成的函数。
作者: 清泛网    时间: 2016-01-15 16:07
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<limits.h>
  4. int max(int a,int b)
  5. {
  6.         if(a>b)
  7.             return a;
  8.         else
  9.             return b;
  10. }

  11. int main()
  12. {
  13.         int x,y,z;
  14.         printf("input tow numbers:\n");
  15.         scanf_s("%d,%d",&x,&y);
  16.         z=max(x,y);
  17.         printf("maxmum=%d",z);
  18. }
复制代码

作者: 泡面    时间: 2016-01-15 16:18
{:gza:}{:gza:}谢谢




欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3