C++递归问题讲解求阶乘、斐波那契数列、输出星号、杨辉三角形

递归是一种在函数定义中使用的编程概念,它意味着函数可以调用自身。递归函数必须有一个基本条件(或者说终止条件),在这个条件下的递归调用将会停止。如果没有这个终止条件,递归将会无限进行下去,最终导致程序崩溃。

在编程中,递归通常用于解决可以分解为更小、更简单子问题的问题。递归函数会将一个大问题分解成更小的子问题,然后调用自身来解决这些子问题。

计算阶乘的C++代码示例:

在这个例子中,factorial() 函数是一个递归函数。当 n 等于0时,函数返回1,这是递归的终止条件。否则,函数会递归调用自身,计算 n 的阶乘。每次递归调用都会将 n 减1,直到 n 等于0为止。 

#include <iostream>  
  
int factorial(int n) {  
    if (n == 0) {  // 终止条件  
        return 1;  
    } else {  // 递归调用  
        return n * factorial(n - 1);  
    }  
}  
  
int main() {  
    int n;  
    std::cout << "请输入一个正整数:";  
    std::cin >> n;  
    std::cout << n << "的阶乘是:" << factorial(n) << std::endl;  
    return 0;  
}

 使用C++实现斐波那契数列的代码:

在这个程序中,我们定义了一个递归函数 fibonacci 来计算斐波那契数列的每一项。如果 n 小于或等于1,函数直接返回 n。否则,函数递归调用 fibonacci(n-1) 和 fibonacci(n-2) 来计算下一项,然后将这两个值相加得到下一项的值。在 main 函数中,我们首先输入要计算的斐波那契数列的项数,然后使用一个循环遍历每一项并输出它们。 

#include <iostream>  
  
int fibonacci(int n) {  
    if (n <= 1) {  
        return n;  
    } else {  
        return fibonacci(n-1) + fibonacci(n-2);  
    }  
}  
  
int main() {  
    int n;  
    std::cout << "请输入要计算的斐波那契数列的项数:";  
    std::cin >> n;  
    std::cout << "斐波那契数列的前" << n << "项为:" << std::endl;  
    for (int i = 0; i < n; i++) {  
        std::cout << fibonacci(i) << " ";  
    }  
    std::cout << std::endl;  
    return 0;  
}

使用递归方式输出星号的C++程序:

#include <iostream>  
  
void printStars(int n) {  
    if (n == 0) {  // 递归终止条件  
        return;  
    }  
    std::cout << "*";  // 输出一个星号  
    printStars(n - 1);   // 递归调用函数  
}  
  
int main() {  
    int n;  
    std::cout << "请输入要输出的星号行数:";  
    std::cin >> n;  
    printStars(n);  
    return 0;  
}

 在上面的程序中,printStars() 函数使用递归方式输出指定行数的星号。当 n 等于0时,递归终止。否则,程序输出一个星号并递归调用 printStars() 函数,每次将 n 减1,直到 n 等于0为止。在 main() 函数中,程序从标准输入读取要输出的星号行数,并调用 printStars() 函数输出指定行数的星号。

求解杨辉三角形

此类问题求解可以从图1过渡到图2。图2是图1每个数字后面多了个空格,每行前面多了个空格。

经图片右侧分析可以看出。递归函数和终止条件。i为行,j为列。递归函数中使用n为行,m为列。

如下图1所示。是简单的杨辉三角形图例。

 图1程序求解。程序如下:

#include <iostream>
using namespace std;
int y(int n,int m)
{
	if(m==1||m==n){
		return 1;
	}
	return y(n-1,m-1)+y(n-1,m);
}

int main() {
int m, n;
cin>>n;
for(int i=1;i<=n;i++){
	for(int j=1;j<=i;j++){
		
		cout<<y(i,j)<<" ";
	}
	cout<<"\n";
}
return 0;
}


输入5。运行结果:

 如图2所示。是复杂的杨辉三角形图例。

程序如下:

#include <bits/stdc++.h>
using namespace std;
int y(int n,int m)
{
	if(m==1||m==n){
		return 1;
	}
	return y(n-1,m-1)+y(n-1,m);
}

int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
	for(int k=n-i;k>=1;k--){
				cout<<"   ";
			}
	for(int j=1;j<=i;j++){
		
		cout<<setw(5)<<y(i,j)<<"  ";
	}
	cout<<"\n";
}
return 0;
}


 输入20。运行结果:

猜你喜欢

转载自blog.csdn.net/babyai996/article/details/134799076