目次:
1.再帰とは何ですか?
再帰は、プロセスまたは関数がその定義または説明で直接または間接的にそれ自体を呼び出す方法です。主なアイデアは、物事を小さくすることです。
2.再帰に必要な2つの条件
1.制限があり、この制限が満たされると、再帰は続行されません
。2。各再帰呼び出しの後、この制限にますます近づきます。
3.例
(1)整数値を受け入れ、各桁を順番に出力します(例:入力1234、出力1 2 3 4)
#include<stdio.h>
void Printf(int num)
{
if (num > 9)
{
Printf(num / 10);
}
printf("%d ",num % 10);
}
int main()
{
int a;
scanf_s("%d", &a);
Printf(a);
printf("\n");
return 0;
}
または
#include<stdio.h>
void Printf(int num)
{
if (num == 0)
{
return;
}
Printf(num / 10);
printf("%d ",num % 10); //后打印
}
int main()
{
int a;
scanf_s("%d", &a);
Printf(a);
printf("\n");
return 0;
}
(2)ループなしで1 + 2 + 3 +…+ nを実現
#include<stdio.h>
int Add(int x)
{
if (x == 1)
{
return 1;
}
//f(n)=f(n-1)+n
return Add(x - 1) + x; //Add(2)+3=Add(1)+2+3
}
int main()
{
int a = 3;
printf("%d\n", Add(a));
return 0;
}
(3)フィボナッチシーケンス(3番目の数字から始まり、各数字は最初の2つの数字の合計に等しい)
即:f(n)= f(n-1)+ f(n-2))// n> = 2
a。再帰を使用する
#include<stdio.h>
int fib(int n)
{
if (n < 2)
{
return n;
}
return fib(n - 1) + fib(n - 2);
}
int main()
{
int x = 10;
printf("%d\n", fib(x));
return 0;
}
b。ループを使用する
#include<stdio.h>
unsigned long long fib1(int n)
{
if (n < 2)
{
return n;
}
int f0 = 0, f1 = 1, f2;
int i = 2;
while (i <= n) //i等于几算的是第几项
{
f2 = f1 + f0;
f0 = f1;
f1 = f2;
++i;
}
return f2;
}
int main()
{
int x = 10;
printf("%lld\n", fib1(x));
return 0;
}