谁能帮我讲讲此程序的求解过程呢?最终的解是多少呢?详细一点,谢谢!

#include<stdio.h>#include<stdlib.h>#defineNUM5intr(intn){inti;if(n<=NUM)returnn;for(i... #include<stdio.h>
#include<stdlib.h>
#define NUM 5
int r(int n)
{
int i;
if(n<=NUM)
return n;
for(i=1;i<=NUM;i++)
if(r(n-i)<0)
return i;
return -1;
}
main()
{
int n=7;

printf("%d\n",r(n));
system("pause");
}
展开
落红玉树花生
2011-07-25 · 超过11用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:30.4万
展开全部
#include<stdio.h>
#include<stdlib.h>
#define NUM 5 //定义一个常数5
int r(int n) //定义一个函数名为r的函数
{
int i; //定义一个变量
if(n<=NUM) //用if语句对括号内的内容进行判断
return n; // 若if语句中的条件成立,返回一个数n
for(i=1;i<=NUM;i++) // for循环语句
if(r(n-i)<0) // if判断语句,递归的调用r()函数自身
return i; // 返回一个变量
return -1; //返回一个常数
}
main() //主函数
{
int n=7; //定义一个变量n,并对其赋值

printf("%d\n",r(n)); //输出一个数字,这个数字为调用函数r()后返回的结果
system("pause"); //程序暂停
}

最终的解为:1
追问
为什么呢?
追答
程序中的r(7)在运行的时候不断的通过函数内的if语句判断条件是否成立。 我想你可能是这步:if(r(n-i)<0)  不太理解吧。这步相当于把n-1看做是一个新的n带入函数r()进行运算,把运算的结果拿来和0进行比较。如果还不理解的话可以设置断点调试程序。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式