[C语言演示课件]第9部分递归程序的设计.ppt
文本预览下载声明
第九部分 递归程序设计技术
学习程序设计需要注意规律性的东西
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
本章内容
递归与循环
递归函数的执行过程
递归函数效率
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
循环与递归
循环程序
用于描述需要重复进行计算
高级语言里,也常见用递归来实现重复的计算。
递归—recursion, recursive algorithm
函数或过程调用自身
C语言允许递归,可以在函数内调用自身,常常使程序更简单清晰。
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
1. 阶乘和乘幂
例:定义计算整数阶乘的函数
1×2×…×(n - 1)×n
本例中,乘的次数依赖于n,计算所需的次数定义时无法确定。
这是一种典型循环情况
计算“次数”依赖某些参数的值。
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
程序
long fact1(long n)
{
long fac, i;
for (fac = 1, i = 1; i = n; i++)
fac *= i;
return fac;
}
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
阶乘函数的精确定义
是一种递归定义的形式
要解决规模为n的问题,要先解决规模为n-1的子问题,依此类推。
如果高级语言允许递归定义函数,就可以直接翻译为程序。
C允许递归定义
在函数定义内直接或间接地调用被定义函数本身。
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
Evaluation only.
Created with Aspose.Slides for .NET 3.5 Client Profile .
Copyright 2004-2011 Aspose Pty Ltd.
写成递归函数
long fact (long n)
{
return n == 0 ? 1 : n * fact(n-1);
}
long fact(long n)
{
if (n = 1)
return 1;
return n * fact(n - 1);
}
Evaluation only.
Created with Aspo
显示全部