Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C 递归


递归

递归是一种使函数调用自身的技巧。这种技巧提供了一种方法,可以将复杂的问题分解成简单的、更容易解决的问题。

递归可能有点难以理解。弄清楚它的工作原理的最好方法是尝试一下。


递归示例

将两个数字加在一起很容易,但是将一系列数字加在一起则更加复杂。在以下示例中,递归用于通过将它分解成加两个数字的简单任务来将一系列数字加在一起

示例

int sum(int k);

int main() {
  int result = sum(10);
  printf("%d", result);
  return 0;
}

int sum(int k) {
  if (k > 0) {
    return k + sum(k - 1);
  } else {
    return 0;
  }
}
自己尝试 »

示例说明

sum() 函数被调用时,它将参数 k 添加到所有小于 k 的数字的总和,并返回结果。当 k 变成 0 时,函数只返回 0。在运行时,程序遵循以下步骤

10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0

由于当 k 为 0 时,函数不会再调用自身,所以程序在那里停止并返回结果。

开发人员在使用递归时应该非常小心,因为很容易写出永远不会终止的函数,或者使用过多内存或处理器能力的函数。但是,当正确编写时,递归可以是一种非常有效且数学上优雅的编程方法。



×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.